测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

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; }
上一题 下一题