题目如下:任意一个4位自然数(要求此4位自然数各位数字不能完全相同,如4444不合题意),将组成该数的各位数字重新排列,形成一个最大数和一个最小数,用最大数减去最小数,即max-min,得到另一个4位的自然数。接下来,在对所得自然数重复上述操作,直到得到一个神秘的数字——6174: 这个数字“6174”也被称为“卡普耶卡常数”
证明详见点击打开链接
代码如下:
(用户输入一个四位数,输出变换到6174的过程)
#include <iostream>
#include <algorithm>
using namespace std;
int f(int n);
int main()
{
int n, m;
while (cin >> n && n)
{
cout << f(n) << endl;
}
return 0;
}
int f(int n)
{
if (n == 6174) // 递归结束条件
return n;
int a[4] = {0};
for(int i=0; n > 0; i++)
{
a[i] = n % 10;
n/=10;
}
sort(a, a + 4); // 将数组a中的元素从大到小排序
int maxn = a[0] + a[1] * 10 + a[2] * 100 + a[3] * 1000;
int minn = a[3] + a[2] * 10 + a[1] * 100 + a[0] * 1000;
n = maxn - minn;
cout << n << endl;
return f(n); // 递归
}
版权声明:本文为qq_41705423原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。