题目描述
“排序相减”操作是指对于任意一个四位数 ,将四个数字分别进行顺序排序和逆序排序,得到两个数取相减后结果的绝对值 ,然后继续将
中的四个数字进行顺序排序和逆序排序,得到两个数取相减后结果的绝对值 以此类推,最后总会得到一个数字黑洞,无法跳出。
输入描述
第一行输入一个整数 ,表示数据组数;
第二行输入一个正整数 和一个正整数 ,表示操作次数;
输出描述
对于每组数据,输出对于开始的数据 在第 次“排序相减”后结果绝对值。
样例
输入样例
2
1234 2
3562 1
输出样例
8352
4176
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
// 将一个整数转换为一个数字数组
vector<int> change(int num) {
vector<int> num_n(4,0);
for (int i = 0; i < 4; i++)
{
num_n.push_back(num%10);
num/=10;
}
return num_n;
}
// 将数字数组拼接成一个整数
int toNumber(const vector<int>& num_n) {
int result = 0;
for (int digit : num_n) {
result = result * 10 + digit;
}
return result;
}
int solce(vector<pair<int,int>> &wei) {
for (auto &i:wei)// 遍历数据
{
for (int j=1;j<=i.second;j++)// 从1开始,到i.second结束
{
vector<int> num_n = change(i.first);// 将i.first转换为数字数组
sort(num_n.begin(), num_n.end()); // 升序排序
int num1 = toNumber(num_n); // 升序拼接成数字
sort(num_n.rbegin(), num_n.rend()); // 降序排序
int num2 = toNumber(num_n); // 降序拼接成数字
i.first=num2-num1;
}
}
return 0;
}
signed main() {
int n;
cin>>n;
vector<pair<int,int>> wei(n);
// 输入数据
for(auto &i:wei)
cin>>i.first>>i.second;
// 处理数据
solce(wei);
//输出结果
for (auto& i : wei)
cout<<i.first<<endl;
return 0;
}