C++数学黑洞6174.doc

  1. 1、本文档共3页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C数学黑洞6174

基础回顾第2题 2、已知:一个任意的四位正整数。将数字重新组合成一个最大的数和最小的数相减,重复这个过程,最多七步,必得6174。即:7641-1467=6174。将永远出不来。 求证:所有四位数数字(全相同的除外),均能得到6174。输出掉进黑洞的步数。 解: ①主要硬件软件环境:VC6.0 ②设计思路:对输入的四位数n分别求出各位数字,并对各位数字重新排序,求出一个最大的四位数和最小的四位数,把最大的四位数和最小的四位数相减重新赋值给n,重复上述过程,当最后等于6174时结束循环 ③程序和运行结果: #includeiostream int p(int n);//设计一个函数反复调用 int n; using namespace std; void main() { int time=1,n1; cout请输入一个四位正整数(各位数字全相同的除外):endl; cinn; cout掉进黑洞的步数:; if(n==6174) cout0endl; if(n!=6174) { n1=p(n); while(n1!=6174) { n1=p(n1); time++; } couttimeendl; } } int p(int n) { int a,b,c,d; int i,j,k,t; a=n/1000;//求各位数字 b=(n-a*1000)/100; c=(n-a*1000-b*100)/10; d=(n-a*1000-b*100-c*10); int s[4]={a,b,c,d};//定义一个数组存放要排序的各位数字 for(i=0;i3;i++) { k=i; for(j=i+1;j4;j++) if(s[j]s[k]) k=j; t=s[k]; s[k]=s[i]; s[i]=t;//选择排序法s[0]到s[3]升序排列 } int e=(s[3]*1000+s[2]*100+s[1]*10+s[0])-(s[0]*1000+s[1]*100+s[2]*10+s[3]); return e; } ④小结(分析存在的问题)方法2 #includeiostream int p(int n);//设计一个函数反复调用 using namespace std; void main() { int n,time=0;//步数置0 cout请输入一个四位正整数(各位数字全相同的除外):endl; cinn; cout掉进黑洞的步数:; if(n==6174) cout0endl; if(n!=6174) { while(n!=6174) { n=p(n); time++; } couttimeendl; } } int p(int n) { bool flag; int s[4],i,j,t; for(i=0;i4;i++) { s[i]=n%10; n=n/10; } for(i=0;i4;i++) { flag=false; for(j=0;j3-i;j++) { if(s[j]s[j+1]) { t=s[j]; s[j]=s[j+1]; s[j+1]=t;//冒泡排序法s[0]到s[3]升序排列 flag=true; } } if(!flag)break; } int e=(s[3]*1000+s[2]*100+s[1]*10+s[0])-(s[0]*1000+s[1]*100+s[2]*10+s[3]); return e; }

文档评论(0)

zhuwenmeijiale + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:7065136142000003

1亿VIP精品文档

相关文档