【NYOJ】[57]6174问题

这里写图片描述
用的家里的小破笔记本
编译器好像还出了点问题
所以用的在线编译器……
在这里也是分享一下:
Ideone.com

这一题的思路是循环计数直到它和变化之后的数相同

#include<stdio.h>
#include<algorithm>
using namespace std;
int ex(int m) {
    int a[4];
    a[0]=m/1000;
    a[1]=(m/100)%10;
    a[2]=(m/10)%10;
    a[3]=m%10;
    sort(a,a+4);
    int sum1=a[3]*1000+a[2]*100+a[1]*10+a[0];
    int sum2=a[0]*1000+a[1]*100+a[2]*10+a[3];
    return sum1-sum2;
}
int main() {
    int T,m;
    scanf("%d",&T);
    while(T--) {
        scanf("%d",&m);
        int cnt=0;
        while(ex(m)!=m) {
            cnt++;
            m=ex(m);
        }
        printf("%d\n",cnt+1);
    }
    return 0;
}

不过从标程来看
似乎最终总是会变化成6174
不得不说数学还是挺奇妙的
(貌似以前听说过这个规律)
思路还是一样的


#include<iostream>
#include<algorithm>
#include<stdio.h>
using namespace std;
int main()
{
    //freopen("1.txt","r",stdin);
    int k;
    cin>>k;
    while(k--)
    {
        int n,a[4],n1,n2;
        scanf("%d",&n);
        int s=1;
        while(n!=6174)
        {
            a[0]=n%10;
            a[3]=n/1000;
            a[1]=n/10%10;
            a[2]=n/100%10;
            sort(a,a+4);
            n1=1000*a[3]+100*a[2]+10*a[1]+a[0];
            n2=1000*a[0]+100*a[1]+10*a[2]+a[3];
            n=n1-n2;
            s++;
        }
        printf("%d\n",s);
    }
}        

题目地址:【NYOJ】[57]6174问题

posted @ 2016-01-26 23:26  BoilTask  阅读(7)  评论(0编辑  收藏  举报