题目
说明:把每个数按位拆分,再排序重组成新的数
代码
自己写的
int ReverseNum(int val) {
//将整数按位反转
vector<int> arr;
while (val != 0) {
arr.push_back(val % 10);
val /= 10;
}
//将val重构为新的数值
val = 0;
//表示倍数
int bei = 1;
for (int i = arr.size() - 1;i >= 0;i--) {
val += (bei * arr[i]);
bei *= 10;
}
return val;
}
int ReverseNumAndSort(int val) {
//将整数按位排序并重组
vector<int> arr;
while (val != 0) {
arr.push_back(val % 10);
val /= 10;
}
sort(arr.begin(), arr.end());
//将val重构为新的数值
val = 0;
//表示倍数
int bei = 1;
for (int i = arr.size() - 1;i >= 0;i--) {
val += (bei * arr[i]);
bei *= 10;
}
return val;
}
int main()
{
int n;
vector<int> curArr;
vector<int> result;
string s;
int item;
int curMaxVal = -1;
while (true) {
curMaxVal = -1;
cin >> n;
if (n == 0) {
break;
}
while (n > 0)
{
//读取n个空格分隔的数
cin >> item;
int newVal = ReverseNumAndSort(item);
if (newVal > curMaxVal) {
curMaxVal = newVal;
}
n--;
}
//输出
result.push_back(curMaxVal);
//cout << curMaxVal << endl;
}
//输出result的结果
for (int i : result) {
cout << i << endl;
}
}
chatgpt 答案
#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
int restructuredNumber(int num) {
// 将数字转换为字符串以便处理每个位
std::string numStr = std::to_string(num);
// 对字符串中的字符进行排序
std::sort(numStr.begin(), numStr.end());
// 将排序后的字符串转换回数字
int restructuredNum = std::stoi(numStr);
return restructuredNum;
}
int main() {
while (true) {
int n;
std::cin >> n;
if (n == 0) {
break;
}
int maxNumber = 0;
for (int i = 0; i < n; ++i) {
int number;
std::cin >> number;
int restructuredNum = restructuredNumber(number);
if (restructuredNum > maxNumber) {
maxNumber = restructuredNum;
}
}
std::cout << maxNumber << std::endl;
}
return 0;
}
机构答案
#include <bits/stdc++.h>
using namespace std;
int func(int num) {
vector<int> t;
while (num) {
t.push_back(num % 10);
num /= 10;
}
sort(t.begin(), t.end());
int sum = 0;
for (int i = 0; i < t.size(); i++) {
sum *= 10;
sum += t[i];
}
return sum;
}
int main() {
int n;
while (cin >> n) {
int max = 0;
int number;
for (int i = 0; i < n; i++) {
cin >> number;
if (max < func(number)) {
max = func(number);
}
}
cout << max << endl;
}
}