J - 数学黑洞

    xiaoxiao2021-03-25  148

    Description

    任意一个4位自然数N(N不能是4个数字一样,如1111、2222、….9999是不可以的,N也不能是6174),将组成自然数N的4个数字重新排列,形成一个最大数和最小数,最大数和最小数相减,其差还是自然数,将差的各数字再重新排列,又形成一个最大数和最小数,最大数和最小数相减,其差还是自然数。反复进行,直到差是一个神秘数6174(数学黑洞)结束。

    Input

    输入数据有多组,每组占一行,每行包含一个4位自然数N。输入文件直到EOF为止!

    Output

    对每组输入,输出有2行。第一行是所有的差,以空格分隔,最后一个数后也有空格;第二行是差的个数。

    Sample Input

    1000 1500 3000

    Sample Output

    999 8991 8082 8532 6174 5 5085 7992 7173 6354 3087 8352 6174 7 2997 7173 6354 3087 8352 6174 6 #include<iostream> using namespace std; int main() { int a,b[4],c,d,e,i,j,k,p; while(cin>>a) {     p=0; while(a!=6174) { d=0; e=0; for(i=0;i<=3;i++) { b[i]=a%10; a=a/10; } for(j=0;j<=3;j++) { for(k=j+1;k<=3;k++) { if(b[j]<b[k]) { c=b[j]; b[j]=b[k]; b[k]=c; } } } for(j=0;j<=3;j++) d=d*10+b[j]; for(j=3;j>=0;j--) e=e*10+b[j]; a=d-e; cout<<a<<' '; p++; if(a<1000) a=a*10; } cout<<endl<<p<<endl; } } 输入一个数当期不等于6174时执行循环。取出其每一位数然后将这几位数排序求出其最大最小数做差。输出新的a统计循环次数。
    转载请注明原文地址: https://ju.6miu.com/read-12955.html

    最新回复(0)