1 条题解
-
0
/* 这个问题的解决思路如下: 输入四位数。 定义一个变量 count 记录转换的次数,初始化为0。 进入一个循环,只要当前数不等于6174,就进行以下步骤: 将这个四位数分解为四个个位数。 对这四个数进行排序。 构造两个新的数:一个是按照降序排序的四位数,另一个是按照升序排序的四位数。 计算这两个数的差,更新当前的四位数。 count 加1。 输出 count。 */ #include <iostream> #include <algorithm> using namespace std; // 将整数n分解为四个数 void split(int n, int num[4]) { for (int i = 0; i < 4; ++i) { num[i] = n % 10; n /= 10; } } // 将四个数组合成一个整数 int combine(int num[4]) { int res = 0; for (int i = 0; i < 4; ++i) { res = res * 10 + num[i]; } return res; } int main() { int n; cin >> n; int count = 0; while (n != 6174) { int num[4]; split(n, num); sort(num, num + 4); int small = combine(num); reverse(num, num + 4); int big = combine(num); n = big - small; ++count; } cout << count << endl; return 0; }
- 1
信息
- ID
- 1036
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者