参考程序:
#include <iostream> // 引入输入输出库
using namespace std;
int main() {
int n = 0;
cin >> n; // 读入一个三位数
// 无限循环,直到结果为 495
for (int t = 0; ; t++) { // t 是操作次数计数器
if (n == 495) {
cout << t << endl; // 输出次数后退出程序
break;
}
// 拆分三位数的各位:百位、十位、个位
int m0 = n % 10; // 个位
int m1 = n / 10 % 10; // 十位
int m2 = n / 100; // 百位
int tmax = 0, tmin = 0;
// 构造最大值和最小值
// 通过比较三个数字的大小关系来进行全排列构造
if (m0 >= m1 && m1 >= m2) {
tmax = m0 * 100 + m1 * 10 + m2;
tmin = m2 * 100 + m1 * 10 + m0;
} else if (m0 >= m2 && m2 >= m1) {
tmax = m0 * 100 + m2 * 10 + m1;
tmin = m1 * 100 + m2 * 10 + m0;
} else if (m1 >= m0 && m0 >= m2) {
tmax = m1 * 100 + m0 * 10 + m2;
tmin = m2 * 100 + m0 * 10 + m1;
} else if (m1 >= m2 && m2 >= m0) {
tmax = m1 * 100 + m2 * 10 + m0;
tmin = m0 * 100 + m2 * 10 + m1;
} else if (m2 >= m0 && m0 >= m1) {
tmax = m2 * 100 + m0 * 10 + m1;
tmin = m1 * 100 + m0 * 10 + m2;
} else { // m2 >= m1 && m1 >= m0
tmax = m2 * 100 + m1 * 10 + m0;
tmin = m0 * 100 + m1 * 10 + m2;
}
// 更新 n 为差值
n = tmax - tmin;
}
return 0;
}
参考程序(sort+vector):
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
int n, t = 0;
cin >> n;
while (n != 495) {
vector<int> digits = {n / 100, (n / 10) % 10, n % 10};
sort(digits.begin(), digits.end());
int tmin = digits[0] * 100 + digits[1] * 10 + digits[2];
int tmax = digits[2] * 100 + digits[1] * 10 + digits[0];
n = tmax - tmin;
t++;
}
cout << t << endl;
return 0;
}