6174问题

任意选一个四位数(数字不能全相同),把所有数字从大到小排列,再把所有数字从小到大排列,用前者减去后者得到一个新的数。重复对新得到的数进行上述操作,7 步以内必然会得到 6174。

我用c写了相关的代码,如下

这是纯循环来做的:
#include <stdio.h>

int main(void)
{
int num,i,k,j,max,min,temp;
int a[4],m[4],s[4];
printf(“请输入一个四位数(四个数字不完全相同):\n”);
scanf("%d",&num);//得到输入的四位数
for (k=1;k<=7;k++) //7步得到6174,循环7次
{
a[0]=num/1000; //对四位数进行分解,得到四个数字
a[1]=num/100-a[0]10;
a[2]=num/10-a[0]100-a[1]10;
a[3]=num%10;
//对四个数字进行排序,从大到小
//冒泡排序
for (i=0;i<4;i++)
{
for (j=1+i;j<4;j++)
{
if (a[i]<a[j])
{
temp=a[i];//从大到小排序
a[i]=a[j];
a[j]=temp;
}
}
}
for (i=0;i<4;i++)
{
m[i]=a[i];
s[i]=a[3-i];
}
max=1000
m[0]+100
m[1]+10
m[2]+m[3];//得到最大的四位数字
min=1000s[0]+100s[1]+10*s[2]+s[3];//得到最小的四位数
num=max-min;//循环
printf(“第%d步:%d-%d=%d\n”,k,max,min,num);
if (num==6174)//如果提前得到6174,退出循环
break;
}
printf(“一共通过%d步得到了6174\n”,k);
return 0;
}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值