void main()
{
int N=100000;///这个N貌似要取到很大才能得到结果
int totalCount=1;
for(int i=2;i<N;i++)
{
totalCount+=CountForSingleNumber(i);
if(i==totalCount)
{
cout<<i<<endl;
break;
}
}
}
4:任何一个自然数m的立方均可写成m个连续奇数之和。例如:
1^3=1
2^3=3+5
3^3=7+9+11
4^3=13+15+17+19
编程实现:输入一自然数n,求组成n3的n个连续奇数。
#include<stdio.h> //具体思想是先通过数学方法求出m与n间的关系
int main()
{long n,i,m;
printf("Enter a number:\n");
scanf("%ld",&n);
m=(n*n-n)/2;
printf("%d^3=");
for(i=1;i<2*n-1;i+=2)
{printf("%d+",2*m+i);}
printf("%d\n",2*m+i);
getch();
return 0;
}
5:写一个方法,在JAVA,C/C++源代码中,检查花括弧(是“(”与 “)”,“{”与“}”)是否匹配,若不匹配,则输出不匹配花括弧所在的行与列。
#include <list>
#include <iostream>
#include <fstream>
using namespace std;
void main()
{
fstream file; //read source
file.open("test.cpp", ios::in);
if( !file)
{
return;
}
int iLineNum = 1;
char s; //character
list<int> lstbracket; //{}
list<int> lstParenthesis; //()
while(!file.eof())
{
file.get(s);
if( s == '\n' )
{
// new line
iLineNum++;
}
// {}
if( s == '{')
{
lstbracket.push_back(iLineNum); //record linenum
}
if( s == '}')
{
if( lstbracket.empty())
{
cout<<"No Matching '}' in "<<iLineNum<<endl;
}
else
{
lstbracket.pop_back();
}
}
if( s == '(')
{
lstParenthesis.push_back(iLineNum);
}
if( s == ')')
{
if( lstParenthesis.empty())
{
cout<<"No Matching ')' in "<<iLineNum<<endl;
}
else
{
lstParenthesis.pop_back();
}
}
}
file.close();
int i = 0;
for( i = 0; i < lstbracket.size(); i++)
{
iLineNum = lstbracket.back();
cout<<"No Matching '{' in "<<iLineNum<<endl;
lstbracket.pop_back();
}
for( i = 0; i < lstParenthesis.size(); i++)
{
iLineNum = lstParenthesis.back();
cout<<"No Matching '(' in "<<iLineNum<<endl;
lstParenthesis.pop_back();
}
cout<<"end"<<endl;
}
6:假设现有一个单向的链表,但是只知道只有一个指向该节点的指针p,并且假设这个节点不是尾节点,试编程实现删除此节点。
将这个指针指向的next节点值copy到本节点,将next指向next->next,并随后删除原next指向的节点。
class node
{
int data;
node* next;
};
void DelNode(node* p)
{
node* pTemp = p->next;
memcpy(p, pTemp, sizeof(node));
p->next = pTemp->next;//这一句貌似多余,不过为了稳妥吧
delete pTemp;
}
7:序列中的“中值记录”指的是:如果将此序列排序之后,它是第n/2个记录。试写出一个求中值记录的算法。
for(int i=0;i<N;i++)//此题原意可能是用快速排序法,但是简单看了下网上的算法思路,没有写出那个算
//法,仅以最原始的方法实现
{
for(int j=i-1;j>=0;j--)
{
if(a[j]<a[j+1])
{
double temp=a[j];
a[j]==a[j+1];
a[j+1]=temp;
}
}
}
8:在你面前有一条长长的阶梯。如果你每步跨2阶,那么最后剩下一阶;如果每步跨3阶,那么最后剩2阶;如果每步跨5阶,那么最后剩4阶;如果每步跨6阶,那么最后剩5阶;如果每步跨7阶,则正好走完。问这个阶梯一共多少阶?编程计算阶梯总共有几阶
#include<iostream>//主要是个数学问题,先求2、3、4、5、6的公倍数
using namespace std;
void main()
{
int N=100000;
int s=1;
for(int i=1;i<N;i++)
{
s=30*i-1;
if(s%7==0)
{
N=i;
cout<<s<<endl;
break;
}
}
}
9:设计程序,正确得出13的13次方的后3位。
#include <iostream.h>
void main()//积的后三位只跟乘数与被乘数的后三位有关
{
int s=1;
for(int i=0;i<13;i++)
{
s=s*13;
s=s00;
}
cout<<s<<endl;
}