C++数学黑洞6174

发布时间:2019-11-19 00:00:25   来源:文档文库   
字号:

基础回顾第2

2已知:一个任意的四位正整数。将数字重新组合成一个最大的数和最小的数相减,重复这个过程,最多七步,必得6174。即:7641-1467=6174。将永远出不来。
求证:所有四位数数字(全相同的除外),均能得到6174。输出掉进黑洞的步数。

解:

要硬件软件环境VC6.0

设计思路:对输入的四位数n分别求出各位数字,并对各位数字重新排序,求出一个最大的四位数和最小的四位数,把最大的四位数和最小的四位数相减重新赋值给n,重复上述过程,当最后等于6174时结束循环

程序和运行结果

#include

int p(int n);//设计一个函数反复调用

int n;

using namespace std;

void main()

{

int time=1,n1;

cout<<"请输入一个四位正整数(各位数字全相同的除外):"<

cin>>n;

cout<<"掉进黑洞的步数:";

if(n==6174)

cout<<"0"<

if(n!=6174)

{

n1=p(n);

while(n1!=6174)

{

n1=p(n1);

time++;

}

cout<

}

}

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;i<3;i++)

{

k=i;

for(j=i+1;j<4;j++)

if(s[j]

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

#include

int p(int n);//设计一个函数反复调用

using namespace std;

void main()

{

int n,time=0;//步数置0

cout<<"请输入一个四位正整数(各位数字全相同的除外):"<

cin>>n;

cout<<"掉进黑洞的步数:";

if(n==6174)

cout<<"0"<

if(n!=6174)

{

while(n!=6174)

{

n=p(n);

time++;

}

cout<

}

}

int p(int n)

{

bool flag;

int s[4],i,j,t;

for(i=0;i<4;i++)

{

s[i]=n%10;

n=n/10;

}

for(i=0;i<4;i++)

{

flag=false;

for(j=0;j<3-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;

}

本文来源:https://www.2haoxitong.net/k/doc/dfabf74fc850ad02de804115.html

《C++数学黑洞6174.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式