- 1、本文档共3页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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)