6174问题

假设一个各位数字不相同的四位数,把所有数字从大到小排序后得到a, 从小到大排序后得到b,然后用a-b替换原来这个数,继续操作。例如,从1234出发,依次有4321-1234=3078,8730-378=8352,8532-2358=6174,7641-1467=6174,回到了自己。

输入一个n位数,输出操作序列知道出现循环。

样例输入:
样例输出: -> -> -> ->

程序:

#include<iostream>
#include<cstring>
#include<stdio.h>
using namespace std; int num[];
int cnt;
bool found; int getNext(int n)
{
int a, b;
char s[], t;
sprintf(s, "%d", n); //将整数打印成字符串保存到s中
int len = strlen(s);
for(int i = ; i < len; i++)
{
for(int j = i + ; j < len; j++)
{
if(s[i] > s[j])
{
t = s[i]; s[i] = s[j]; s[j] = t;
}
}
}
sscanf(s, "%d", &a); //从s中读入数据 for(int i = ; i < len / ; i++)
{
t = s[i]; s[i] = s[len - - i]; s[len - - i] = t;
}
sscanf(s, "%d", &b); return b - a;
} int main()
{
cin >> num[];
cout << num[]; cnt = ;
while(true)
{
num[cnt] = getNext(num[cnt - ]);
cout << " -> " << num[cnt];
found = false;
for(int i = ; i < cnt; i++)
{
if(num[i] == num[cnt])
{
found = true;
break;
}
}
if(found) break;
cnt++;
}
cout << endl;
return ;
}
04-21 05:05
查看更多