您的位置:首页 > 其它

nyoj57 6174问题

2014-05-26 12:16 246 查看
题目57
题目信息
运行结果
本题排行
讨论区

6174问题

时间限制:1000 ms | 内存限制:65535 KB难度:2描述假设你有一个各位数字互不相同的四位数,把所有的数字从大到小排序后得到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
来源[张洁烽]原创上传者张洁烽
代码

查看代码---运行号:719473----结果:Accepted

运行时间:2014-02-11 03:03:23 | 运行人:shengweisong
#include<stdio.h>
int main()
{
    int i, j, n, m, a[4], b, c;
    scanf( "%d", &n );
    while( n-- ){
        scanf( "%d",&m );

            /*a[1] = m%10;
            m /=10;
            a[2] = m%10;
            m /=10;
            a[3] = m%10;*/

        int y = 1;
        while( m!=6174 ){
            for( i =0; i <4; i++){
                a[i] = m%10;
                m /=10;
            }

        for( i =0; i <4; i++ )
        for( j =i; j <4; j ++ )
        if( a[i] <a[j] ){   /*因为中间的这一个“<”没有记熟 浪费了将近2个小时  记住教训
            int s = a[j];
            a[j] = a[i];
            a[i] = s;
        }
        c = a[0]*1000+a[1]*100+a[2]*10+a[3];
        b = a[3]*1000+a[2]*100+a[1]*10+a[0];
        m = c-b;
        y ++;
}
        printf( "%d\n", y );

    }

    return 0;
}
        感想:看题要认真, 在做提前要调整好最佳状态  要有答题思路 再编码  把一些常用的代码记熟  记住教训啊!!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: