代码:
#include <bits/stdc++.h>
#define int long long
using namespace std;
// 计算序列中下一个数字
string next(string num) {
// 对数字的数字进行排序以获取最大和最小的数字
string a = num;
string b = num;
sort(a.rbegin(), a.rend()); // 降序
sort(b.begin(), b.end()); // 升序
// 转换为整数
int sum1 = stoi(a);
int sum2 = stoi(b);
// 减去并返回为字符串
int ans = sum1 - sum2;
return to_string(ans);
}
// 查找进入循环的第一个数字
string find(string start) {
set<string> seen; // “跟踪”看到的数字
string now = start;
while (true) {
if (seen.count(now)) {
return now; // 找到循环,返回数字
}
seen.insert(now); // 将当前编号标记为已见
now = next(now); // 计算下一个数字
}
}
signed main()
{
int n, d;
cin >> n >> d;
vector<string> a(n);
if (d == 4) {
while (n--) {
cout << "6174\n";
}
return 0;
} else if (d == 3) {
while (n--) {
cout << "495\n";
}
return 0;
}
for (int i = 0; i < n; ++i) {
string s;
cin >> s;
a[i] = find(s); // 找到循环编号并存储
}
for (auto it : a) {
cout << it << '\n';
}
return 0;
}
为什么12qwq,知道问题(有时会输出0)但改不出来
@stringdp100005