首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

关于C语言“6174有关问题”,前辈

2013-06-26 
关于C语言“6174问题”,请教各位前辈本人今年大一,初学C语言,在做ACM的题,关于6174问题~描述 假设你有一个各

关于C语言“6174问题”,请教各位前辈
本人今年大一,初学C语言,在做ACM的题,关于6174问题~
描述 
假设你有一个各位数字互不相同的四位数,把所有的数字从大到小排序后得到a,从小到大后得到b,然后用a-b替换原来这个数,并且继续操作。例如,从1234出发,依次可以得到4321-1234=3087、8730-378=8352、8532-2358=6174,又回到了它自己!现在要你写一个程序来判断一个四位数经过多少次这样的操作能出现循环,并且求出操作的次数

比如输入1234执行顺序是1234->3087->8352->6174->6174,输出是4

输入第一行输入n,代表有n组测试数据。
 接下来n行每行都写一个各位数字互不相同的四位数输出经过多少次上面描述的操作才能出现循环
样例输入   
1
1234
样例输出
4


以下是我的代码
#include<stdio.h>
int main()
{
    int n;
    scanf("%d",&n);
    while(n--)
    {
       int a[4];
       int temp,i,j,m,N,M,count=0;
        scanf("%d",&m);
        while(m!=6174)
       {
        a[0]=m/1000;
        a[1]=m/100%10;
        a[2]=m/10%10;
        a[3]=m%10;
        for(i=0;i<3;i++)
        for(j=0;j<3-i;j++)
       {
           if(a[j]<a[j+1])
           temp=a[j];
           a[j]=a[j+1];
           a[j+1]=temp;
       }
       N=1000*a[0]+100*a[1]+10*a[2]+a[3];
       M=1000*a[3]+100*a[2]+10*a[1]+a[0];
       m=N-M;
       count++;
       }
       printf("%d\n",count);
    }
    return 0;
}

请问各位前辈为什么我运行代码的时候输入回车之后不能再输入别的字符了? C
[解决办法]
不能出结果是因为少了对括号。。导致冒泡排序错了。。


#include<stdio.h>
int main()
{
int n;
    scanf("%d",&n);
    while(n--)
    {
int a[4];
int temp,i,j,m,N,M,count=0;
scanf("%d",&m);
while(m!=6174)
{
a[0]=m/1000;
a[1]=m/100%10;
a[2]=m/10%10;
a[3]=m%10;
for(i=0;i<3;i++)
{
for(j=0;j<3-i;j++)
{
if(a[j]<a[j+1])//这里少了对括号
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
N=1000*a[0]+100*a[1]+10*a[2]+a[3];
M=1000*a[3]+100*a[2]+10*a[1]+a[0];
m=N-M;
count++;
}
printf("%d\n",count);
    }
    return 0;
}

热点排行