6174问题
时间限制:1000 ms | 内存限制:65535 KB
难度:2
题目链接:http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=57
描述
假设你有一个各位数字互不相同的四位数,把所有的数字从大到小排序后得到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
心得体会:
这道题主要用了数组还有 排序函数,把排好序的数字存入min,max中然后相减,进行判断,如果结果不等于6174则继续执行程序!
#include<iostream>
#include<vector>
#include<algorithm>
#define Answer 6174
using namespace std;
bool cmp(int n,int m)
{
return n>m;
}
int JiSuan(int m[4])
{
int min=0,max=0;
sort(m,m+4);//从小到大
min=m[0]*1000+m[1]*100+m[2]*10+m[3];
sort(m,m+4,cmp);
max=m[0]*1000+m[1]*100+m[2]*10+m[3];
return max-min;
}
int main()
{
int n;
cin >> n;
while(n--)
{
int a,i=1,m[4]={0};
cin >> a;
do{
m[0]=a/1000;m[1]=a/100%10;m[2]=a/10%10;m[3]=a%10;
a=JiSuan(m);
++i;
}while(a!=Answer);
cout << i << "\n";
}
return 0;
}