此文写于2013年5月20日。
全部为当初在学校自己写的,尤为对于在校学生,认真看是能看懂的。
题目1:古希腊人认为因子的和等于它本身的数是一个完全数(自身因子除外),例如28的因子是1、2、4、7、14,且1+2+4+7+14=28,则28是一个完全数,编写一个程序求2-1000内的所有完全数。
#include "stdio.h"
#include "math.h"
main()
{
int mymath,i,inputmath,a,b;
for(i=2;i<=1000;i++)
{
inputmath=1;
b=sqrt(i);
for(mymath=2;mymath<=b;mymath++)
{
if(i%mymath==0)
{
a=i/mymath;
inputmath=inputmath+a+mymath;
}
}
if(inputmath==i)
{
printf("%d\t",inputmath);
}
}
}
题目2:一辆以固定速度行驶的汽车,司机在上午10点看到里程表上的读数是一个对称数(即这个数从左向右读和从右向左读是完全一样的),为95859。两小时后里程表上出现了一个新的对称数。问该车的速度是多少?新的对称数是多少?
#include "stdio.h"
#include "math.h"
main(
{
long i,a[6],b,c;
for(i=95860;i<1000000;i++)
{
if(i<100000)
{
a[0]=i/10000;
a[1]=i/1000%10;
a[2]=i/100%10;
a[3]=i%100/10;
a[4]=i%10;
b=a[4]*10000+a[3]*1000+a[2]*100+a[1]*10+a[0];
if(b==i)
{
c=(i-95859)/2;
printf("新的对称数是:%d\n",i);
printf("速度:%d\n",c);
break;
}
}
}
}
题目3:自守数是指一个数的平方的尾数等于该数自身的自然数。例如:
25^2=625 76^2=5776 9376^2=87909376
请求出200000以内的自守数
参考结果:
0 1 5 6 25 76 376 625 9376 90625 109376
#include "stdio.h"
#include "math.h"
main()
{
long i,a;
for(i=0;i<=200000;i++)
{
if(i<10)
{
a=i*i%10;
if(i==a)
{
printf("%ld\t",i);
}
}
else if(i<100)
{
a=i*i%100;
if(i==a)
{
printf("%ld\t",i);
}
}
else if(i<1000)
{
a=i*i%1000;
if(i==a)
{
printf("%ld\t",i);
}
}
else if(i<10000)
{
a=i*i%10000;
if(i==a)
{
printf("%ld\t",i);
}
}
else if(i<100000)
{
a=i*i%100000;
if(i==a)
{
printf("%ld\t",i);
}
}
else
{
a=i*i%1000000;
if(i==a)
{
printf("%ld\t",i);
}
}
}
}
题目4:一个自然数的七进制表达式是一个三位数,而这个自然数的九进制表示也是一个三位数,且这两个三位数的数码顺序正好相反,求这个三位数。
#include "stdio.h"
main()
{
int i,a,b,x[3],c,y[3],d,e;
for(i=81;i<500;i++)
{
e=i;
for(a=0;a<3;a++)
{
x[a]=e%7;
e=e/7;
}
b=x[2]*100+x[1]*10+x[0];
for(d=0;d<3;d++)
{
y[d]=b%9;
b=b/9;
}
c=y[0]*100+y[1]*10+y[2];
if(x[2]==y[0]&&x[1]==y[1]&&x[0]==y[2])
{
printf("%d\t%d\t%d\n",x[2],x[1],x[0]);
printf("%d\t%d\t%d\n",y[2],y[1],y[0]);
printf("%d\n",c);
break;
}
}
}
题目5:带分数
100 可以表示为带分数的形式:100 = 3 + 69258 / 714
还可以表示为:100 = 82 + 3546 / 197
注意特征:带分数中,数字1~9分别出现且只出现一次(不包含0)。
类似这样的带分数,100 有 11 种表示法。
题目要求:
从标准输入读入一个正整数N (N<1000*1000)
程序输出该数字用数码1~9不重复不遗漏地组成带分数表示的全部种数。
注意:不要求输出每个表示,只统计有多少表示法!
例如:
用户输入:
100
程序输出
11
再例如:
用户输入:
105
程序输出:
6
#include "stdio.h"
int charnum(int i,int j,int k)
{
int a,x[10],f;
for(f=0;f<10;f++)
{
x[f]=0;
}
while(i)
{
a=i%10;
x[a]++;
if(x[a]>1)
{
return 0;
}
i=i/10;
}
while(j)
{
a=j%10;
x[a]++;
if(x[a]>1)
{
return 0;
}
j=j/10;
}
while(k)
{
a=k%10;
x[a]++;
if(x[a]>1)
{
return 0;
}
k=k/10;
}
if(x[0]>0)
{
return 0;
}
for(f=1;f<10;f++)
{
if(x[f]==0)
{
return 0;
}
}
return 1;
}
void main()
{
int n,i,j,k,count;
printf("请输入n:");
scanf("%d",&n);
count=0;
for(i=1;i<=n-1;i++)
{
for(k=1;k<=9999;k++)
{
if(i!=k)
{
j=(n-i)*k;
if(charnum(i,j,k)==1)
{
count++;
printf("\n%d=%d+%d/%d",n,i,j,k);
}
}
}
}
printf("\n%d的带分数的表示法有%d种\n",n,count);
}