A21388. 小明在学习数字魔术,他有一个三位数的魔术数字。作为魔术师助手,你需要帮他重新排列这个数字的三个数位,创造出可能的最小数字。重新排列后的数字可以是一位数、两位数或三位数,但展示时不能有前导零。
填空题
较难
知识点
题目描述
题目描述
小明在学习数字魔术,他有一个三位数的魔术数字。作为魔术师助手,你需要帮他重新排列这个数字的三个数位,创造出可能的最小数字。重新排列后的数字可以是一位数、两位数或三位数,但展示时不能有前导零。
输入格式
输入第一行包含一个整数 $n$,表示这个三位数数字(保证是一个合法的三位数,即不含前导零)。
输出格式
输出一行包含一个整数,表示最小的数字,并且这个数字不应该包含前导0。
样例输入1
213样例输出1
123
2样例输入2
203 样例输出2
23参考答案
#include <bits/stdc++.h>
using namespace std;
int n, k, ar[10];
void solve() {
cin >> n; // 读取三位数
k = 0; // 重置k,清空之前的数据
memset(ar, 0, sizeof(ar)); // 清空数组
// 将数位依次存入 ar[1..3]
while (n) {
ar[++k] = n % 10; // 从低位开始取
n /= 10;
}
sort(ar + 1, ar + 1 + k); // 对 ar[1], ar[2], ar[3] 进行升序排序
// 直接按"百位*100 + 十位*10 + 个位"的方式输出
// cout 输出整数时,会自动去掉高位的 0
// 例如 ar = {0,2,3} 时:0*100 + 2*10 + 3 = 23,符合题意
if (k == 1) {
cout << ar[1];
} else if (k == 2) {
cout << ar[1] * 10 + ar[2];
} else if (k == 3) {
cout << ar[1] * 100 + ar[2] * 10 + ar[3];
}
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
solve();
return 0;
}
上一题
下一题