C语言程序设计100例之(4):水仙花数_第1页
C语言程序设计100例之(4):水仙花数_第2页
C语言程序设计100例之(4):水仙花数_第3页
C语言程序设计100例之(4):水仙花数_第4页
C语言程序设计100例之(4):水仙花数_第5页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、C 语言程序设计100 例之( 4):水仙花数例 4水仙花数题目描述一个三位整数(100 999),若各位数的立方和等于该数自身,则称其为“水仙花数”(如:333输入格式没有输入输出格式若干行,每行1 个数字。输入样例无输出样例153* * *.* * *(输出被和谐了)(1)编程思路 1。对三位数n(n 为 100999 之间的整数)进行穷举。对每个枚举的n,分解出其百位(a=n/100 )、十位 b( b=n/10%10 )和个位 c( c=n%10),若满足a*a*a+b*b*b+c*c*c= n则 n 是水仙花数。a,(2)源程序 1。#include int main()int n,

2、 a, b, c;/n 、 a、b 和 c 分别为三位数自身及其百位、十位和个位for(n=100 ;n=999;n+)a=n/100;b=n/10%10;c=n%10;if(a*a*a+b*b*b+c*c*c= n)printf(%dn,n);return 0;(3)编程思路 2。用一个三重循环对一个3 位数的百位a( a 的范围为 19)、十位 b( b 的范围为 09)和个位 c( c 的范围为09)进行穷举,在循环体中,计算出3 位数 n( n=100*a+10*b+c ),然后进行判断,若满足a*a*a+b*b*b+c*c*c= n,则 n 是水仙花数。(4)源程序 2。#inclu

3、de using namespace std;int main()int n, a, b, c;/n 、 a、 b 和 c 分别为三位数自身及其百位、十位和个位for(a=1 ;a=9;a+)for (b=0; b=9;b+)for(c=0;c=9;c+)n=100*a+10*b+c;if(a*a*a+b*b*b+c*c*c= n)printf(%dn,n);return 0;习题 44-1子数整数本题选自洛谷题库( /problem/P1151)题目描述对于一个五位数a1a2a3a4a5,可将其拆分为三个子数:sub1=a1a2a3sub2=a2a3a

4、4sub3=a3a4a5例如,五位数20207 可以拆分成sub1=202sub2=020(=20)sub3=207现在给定一个正整数K,要求你编程求出10000 到 30000 之间所有满足下述条件的五位数,条件是这些五位数的三个子数sub1 ,sub2 ,sub3 都可被 K 整除。输入格式一个正整数K输出格式每一行为一个满足条件的五位数,要求从小到大输出。不得重复输出或遗漏。如果无解,则输出“ No”。输入样例15输出样例22555255552855530000( 1)编程思路。本题关键是分离出一个五位数n 的三个子数sub1 ,sub2 和 sub3。由于 sub1 是 n 的高 3位

5、数,因此, sub1=n/100 ; sub2 是 n 的中间 3 位数,因此,sub2=n/10%1000 ; sub3 是 n 的低 3 位数,因此,sub3=n%1000。用循环 for (n=10000;n=30000;n+)对每个五位数n 进行穷举判断即可。( 2)源程序。#include int main()int i,sub1,sub2,sub3,k,f=0;scanf(%d,&k);for (i=10000;i=30000;i+)sub1=i/100;sub2=i/10%1000;sub3=i%1000;if (sub1%k=0 & sub2%k=0 &

6、 sub3%k=0)printf(%dn,i);f=1;if (f=0) printf(Non);return 0;4-24 位分段和平方数题目描述一个 4 位自然数分为前后两个2 位数,若该数等于所分两个2 位数和的平方, 则称为 4 位分段和平方数。例如,2025=( 20+25)2。编写程序求出所有4 位分段和平方数。输入格式没有输入输出格式若干行,每行1 个数字。输入样例无输出样例2025* * *.* * *(输出被和谐了)( 1)编程思路1。对所有的 4 位整数 n 进行穷举,离出高两位数 x(x=n/100 )和低两位数则n 是一个 4 位分段和平方数。n 的范围为 100099

7、99 ,共 9000 个数。对每个数 n,分 y(y=n%100),然后进行判断, 若满足 n=(x+y)*(x+y) ,( 2)源程序1。#include int main()int n,x,y;for(n=1000;n=9999;n+)x=n/100;y=n%100;if (n=(x+y)*(x+y)printf(%dn,n);return 0;( 3)编程思路2。思路 1 的穷举次数为9000 次。实际上,由于 4 位分段和平方数一定首先是一个平方数,因此只需要穷举4 位数中的平方数即可, 即穷举1000 9999之间的数 a,在循环体中,先计算出 4 位数 n=a*a,再分离出高两位数

8、 x( x=n/100)和低两位数 y( y=n%100),然后进行判断,若满足 a=(x+y),则 n 是一个 4 位分段和平方数。显然,这样穷举,循环次数会大为减少。( 4)源程序2。#include #include int main()int a,n,x,y;for(a=(int)sqrt(1000);a=(int)sqrt(9999);a+)n=a*a;x=n/100;y=n%100;if (a=x+y)printf(%dn,n);return 0;4-3特定的四位数题目描述有这样一些特定的四位数,它的千位数字与十位数字之和等于百位数字与个位数字之积。如, 3136,3+3=1*6 ,故 3136 就是一个特定的四位数。输入格式一个正整数K( 1111=K=9999)输出格式一个不大于K 的最大的特定四位数。输入样例例8000输出样例7921( 1)编程思路。从 k 开始对四位数i 进行穷举,对每个四位数i 分离出千位a( a=i/1000 )、百位bb=(i-a*1000)/100 )、十位 c( c=(i-a*1000-b*100)/10 )和个位 d (d=i%10)。( 2)源程序。#includeint main()int i,k,a,b,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论