C语言竞赛题目大全(7)

2019-08-30 23:10

23. 23.阿姆斯特朗数 如果一个正整数等于其各个数字的立方和,则称该数为阿姆斯特朗数(亦称为自恋性数)。 如 407=43+03+73就是一个阿姆斯特朗数。试编程求1000以内的所有阿姆斯特朗数。 *题目分析与算法设计 可采用穷举法,依次取1000以内的各数(设为i),将i的各位数字分解后,据阿姆斯特朗数的性质进行计算和判断。 *程序说明与注释 #include void main() { int i,t,k,a[3]; printf(\ for(i=2;i<1000;i++) /*穷举要判定的数i的取值范围2~1000*/ { for(t=0,k=1000;k>=10;t++) /*截取整数i的各位(从高向低位)*/ { a[t]=(i%k)/(k/10); /*分别赋于a[0]~a[2}*/ k/=10; } if(a[0]*a[0]*a[0]+a[1]*a[1]*a[1]+a[2]*a[2]*a[2]==i) /*判断i是否为阿姆斯特朗数*/ printf(\ /*若满足条件,则输出*/ } printf(\} *运行结果 There are following Armstrong number smaller than 1000: 153 370 371 407 -------------------------------------------------------------------------------- -- 作者:huang01 -- 发布时间:2004-10-21 17:03:40 -- 24. 24.完全数 如果一个数恰好等于它的因子之和,则称该数为“完全数”。 *题目分析与算法设计 根据完全数的定义,先计算所选取的整数a(a的取值1~1000)的因子,将各因子累加于m,若m等于a,则可确认a为完全数。 *程序说明与注释 #include void main() { int a,i,m; printf(\ for(a=1;a<1000;a++) /*循环控制选取1~1000中的各数进行判断*/ { for(m=0,i=1;i<=a/2;i++) /*计算a的因子,并将各因子之和m=a,则a是完全数输出*/ if(!(a%i))m+=i; if(m==a) printf(\ \ } printf(\

31

} *运行结果 TThere are following perfect numbers smaller than 1000: 6 28 496 25. 26.亲密数 如果整数A的全部因子(包括1,不包括A本身)之和等于B;且整数B的全部因子(包括1,不包括B本身)之和等于A,则将整数A和B称为亲密数。求3000以内的全部亲密数。 *题目分析与算法设计 按照亲密数定义,要判断数a是否有亲密数,只要计算出a的全部因子的累加和为b,再计算b的全部因子的累加和为n,若n等于a则可判定a和b是亲密数。计算数a的各因子的算法: 用a依次对i(i=1~a/2)进行模运算,若模运算结果等于0,则i为a的一个因子;否则i就不是a的因子。 *程序说明与注释 #include void main() { int a,i,b,n; printf(\ for(a=1;a<3000;a++) /*穷举1000以内的全部整数*/ { for(b=0,i=1;i<=a/2;i++) /*计算数a的各因子,各因子之和存放于b*/ if(!(a%i))b+=i; /*计算b的各因子,各因子之和存于n*/ for(n=0,i=1;i<=b/2;i++) if(!(b%i))n+=i; if(n==a&&a

32

void main() { long mul,number,k,ll,kk; printf(\ for(number=0;number<200000;number++) { for(mul=number,k=1;(mul/=10)>0;k*=10); /*由number的位数确定截取数字进行乘法时的系数k*/ kk=k*10; /*kk为截取部分积时的系数*/ mul=0; /*积的最后n位*/ ll=10; /*ll为截取乘数相应位时的系数*/ while(k>0) { mul=(mul+(number%(k*10))*(number%ll-number%(ll/10)))%kk; /*(部分积+截取被乘数的后N位*截取乘数的第M位),%kk再截取部分积*/ k/=10; /*k为截取被乘数时的系数*/ ll*=10; } if(number==mul) /*判断若为自守数则输出*/ printf(\ \ } } *运行结果 It exsts following automorphic numbners smaller than 200000: 0 1 5 6 25 76 376 625 9376 90625 109376 27. 28.回文数 打印所有不超过n(取n<256) 的其平方具有对称性质的数(也称回文数)。 *题目分析与算法设计 对于要判断的数n,计算出其平方后(存于a),将a的每一位进行分解,再按a的从低到高的顺序将其恢复成一个数k(如n=13,则a=169且k=961),若a等于k则可判定n为回亠数。 *程序说明与注释 #include void main() { int m[16],n,i,t,count=0; long unsigned a,k; printf(\ number it\\'s square(palindrome)\\\\n\ for(n=1;n<256;n++) /*穷举n的取值范围*/ { k=0;t=1;a=n*n; /*计算n的平方*/ for(i=1;a!=0;i++) /*从低到高分解数a的每一位存于数组m[1]~m[16]*/ { m=a; a/=10; } for(;i>1;i--) { k+=m[i-1]*t; t*=10; } if(k==n*n) printf(\ } } *运行结果

33

No. number it\\'s square(palindrome) 1 1 1 2 2 4 3 3 9 4 11 121 5 22 484 6 26 676 7 101 10201 8 111 12321 9 121 14641 -------------------------------------------------------------------------------- -- 作者:huang01 -- 发布时间:2004-10-21 17:04:07 -- 28. 29.求具有abcd=(ab+cd)2性质的四位数 3025这个数具有一种独特的性质:将它平分为二段,即30和25,使之相加后求平方,即(30+25)2,恰好等于3025本身。请求出具有这样性质的全部四位数。 *题目分析与算法设计 具有这种性质的四位数没有分布规律,可以采用穷举法,对所有四位数进行判断,从而筛选出符合这种性质的四位数。具体算法实现,可任取一个四位数,将其截为两部分,前两位为a,后两位为b,然后套用公式计算并判断。 *程序说明与注释 #include void main() { int n,a,b; printf(\ for(n=1000;n<10000;n++) /*四位数N的取值范围1000~9999*/ { a=n/100; /*截取N的前两位数存于a*/ b=n0; /*截取N的后两位存于b*/ if((a+b)*(a+b)==n) /*判断N是否为符合题目所规定的性质的四位数*/ printf(\ \ } } *运行结果 There are following numbers with 4 digits satisfied condition: 2025 3025 9801 29. 30.求素数 求素数表中1~1000之间的所有素数 *问题分析与算法设计 素数就是仅能衩1和它自身整除的整数。判定一个整数n是否为素数就是要判定整数n能否被除1和它自身之外的任意整数整除,若都不能整除,则n为素数。 程序设计时i可以从2开始,到该整数n的1/2为止,用i依次去除需要判定的整数,只要存在可以整除该数的情况,即可确定要判断的整数不是素数,否则是素数。 *程序与程序注释 #include void main() { int n1,nm,i,j,flag,count=0; do{ printf(\ scanf(\ /*输入求素数的范围*/

34

}while(!(n1>0&&n1 #include int fflag(int n); void main() { int i,n; for(i=4;i<=2000;i+=2) { for(n=2;n

35


C语言竞赛题目大全(7).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:云南省高中数学学业水平测试题分类汇编

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: