五道程序算数题

此文写于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);

}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容