参考程序:
#include <iostream> // 引入输入输出库
using namespace std;int main() {int n = 0;cin >> n; // 读入一个三位数// 无限循环,直到结果为 495for (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 >= m0tmax = 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;
}