欧式楼梯间吊顶:还是C++的改错哦

来源:百度文库 编辑:中科新闻网 时间:2024/05/07 07:51:51
程序要求:对任意一个各位数字不完全相同的四位数(如4133),将各位上的数字从大到小排列得到一个降序数(4331)。用大数(降序数)减去小数(升序数)得到一个新的四位数(2997=4331-1334)。若相减或不足四位,则高位上补零。称此过程为一次变换。将新的四位数按上述方法再变换一次,又得到一个四位数。有断言,经过多次变换,最后一定会得到一个固定的数6174。以下程序试图验证这个断言。
# include<iostream.h>

int change(int t);
{
int a[4];
int max=0,min=0;
for(int i=0;i<4;i++)
{
a[i]=t%10;
t=10;
}
for(i=0;i<3;i++)
for(j=i+1;j<4;j++)
if(a[i]<a[j])
{
int k=a[i];a[j];a[j]=k;
}
for(i=0;i<4;i++) min=min*10+a[i];
for(i=3;i>=0;i--) max=max*10+a[i];
return min-max;
}
void main()
{
int a;
cout<<"Input a:";
cin>>a;
int old;
do
{
old=a;
a=change(old);
}while(old!=a);
cout<<a<<endl;
}

# include<iostream.h>
int change(int t)
{
int a[4];
int max=0,min=0;
int i,j,k;
for(i=0;i<4;i++)
{ a[i]=t%10;t/=10; }
for(i=0;i<3;i++)
for(j=i+1;j<4;j++)
if(a[i]<a[j])
{
k=a[i];a[i]=a[j];a[j]=k;
}
for(i=0;i<4;i++) max=max*10+a[i];
for(i=3;i>=0;i--) min=min*10+a[i];
cout<<"max="<<max<<" min="<<min<<endl;
return max-min;
}

void main()
{
int old;
int a;
cout<<"Please input a not all same five bit number.\n";
cin>>a;
do
{
old=a;
a=change(old);
}while(a!=6174);
cout<<a<<endl;
}
运行结果如下:
Please input a not all same five bit number.
4133
max=4331 min=1334
max=9972 min=2799
max=7731 min=1377
max=6543 min=3456
max=8730 min=378
max=8532 min=2358
6174
Press any key to continue...

change函数写的很乱,至少有两到三处错误。
而且不管是a[i]还是a[j]改变的都只是a数组中的元素。
建议定义一个b[4]用于存放排序后的元素。