循环(多层循环)_6174问题

任务描述

著名的“6174黑洞”问题描述如下:
对于任意一个各位数字不全相同的4位正整数n,对n进行以下变换:把n所有的数字从大到小排序后得到整数a,
所有的数字从小到大排列后得到整数b,然后把a-b做为新的4位整数n,然后重复以上变换操作,直到得到6174,
然后便进入7641-1476=6174的陷阱(黑洞)。
(所有计算过程中如果得到4位以下的数,可以在整数左侧补0补足4位)

例如,从9998出发,依次可以得到
(第1次变换)9998-8999=0999
(第2次变换)9990-0999=8991
(第3次变换)9981-1899=8082
(第4次变换)8820-0288=8532
(第5次变换)8532-2358=6174
(以后进入黑洞,出不来)6174-6174=6174
经过5次变换后,得到6174。

再例如,从1234出发,依次可以得到
(第1次变换)4321-1234=3087、
(第2次变换)8730-0378=8352、
(第3次变换)8532-2358=6174、
(以后进入黑洞,出不来)6174-6174=6174
经过3次变换后,得到6174。

也就是说,对于任意一个各位数字不全相同的4位正整数n经过若干步骤计算,最终会是到6174,并陷入6174
的轮回!这就是数学上著名的6174黑洞问题。

现在要你写一个程序来输出一个四位数要经过多少次这样的变换能得到6174,比如
对于输入1234,应该输出3,对于输入9998,应该输出5。

输入格式:

第一个整数k,代表有k组测试数据。接下来是k个4位整数(保证4位数字不全相同)。

输出格式:

每行输出一个整数,代表一组数据的结果。

输入样例:

2 1234 9998

输出样例:

3
5

#include <stdio.h>
int chu(int x)
{
    int sum,c,d,e;
    sum=0;
    while(e!=6174)
    {
        int b[4];
        
        for(int j=0;j<4;j++)
        {
            b[j]=x%10;
            x=x/10;
        }
        for(int m=0;m<3;m++)
        {
            
            for(int j=0;j<3-m;j++)
            {
                if(b[j]<b[j+1])
               {
                int temp;
                temp=b[j];
                b[j]=b[j+1];
                b[j+1]=temp;//从小到大排好
               }
            }
            
            
        }
            c=b[0]*1000+b[1]*100+b[2]*10+b[3];
            d=b[3]*1000+b[2]*100+b[1]*10+b[0];
            e=c-d;
            sum++;
            x=e;
    }
     return sum;
}
int main() 
{
    int k,out;
    scanf("%d",&k);
    for(int i=1;i<=k;i++)
    {
        int a;
        scanf("%d",&a);
        out=chu(a);
        printf("%d\n",out);
    }

    return 0;
}
 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值