返回 课程

信奥AC之路-3级

0% 完成
0/0 步骤
  1. 第一课:数组基础
    4 主题|小节
  2. 第二课:数组基础二
    6 主题|小节
  3. 第三课:数组基础三
    6 主题|小节
  4. 第四课:数组基础四
    7 主题|小节
  5. 第五课:数组基础五
    5 主题|小节
  6. 第六课:数组用于统计,去重,排序
    5 主题|小节
  7. 第七课:冒泡排序
    6 主题|小节
  8. 第八课:数组连续性元素
    6 主题|小节
  9. 第九课:数组综合一
    7 主题|小节
  10. 第十课:字符数组
    7 主题|小节
  11. 第十一课:字符数组基础应用
    5 主题|小节
  12. 第十二课:字符数组基础应用二
    6 主题|小节
  13. 第十三课:字符数组进阶
    6 主题|小节
  14. 第十四课:字符串进阶二
    6 主题|小节
  15. 第十五课:字符串(STL)
    9 主题|小节
  16. 第十六课:字符串基础
    6 主题|小节
  17. 第十七课:字符串函数
    6 主题|小节
  18. 第十八课:字符串函数二
    4 主题|小节
  19. 第十九课:sort函数
    7 主题|小节
  20. 第二十课:字符串进阶
    7 主题|小节
  21. 第二十一课:字符串进阶二
    6 主题|小节
  22. 第二十二课:进制转换--十进制转其他进制
    5 主题|小节
  23. 第二十三课:进制转换--其他进制转十进制
    5 主题|小节
  24. 第二十四课:二进制,八进制,十六进制转换
    5 主题|小节
  25. 第二十五课:数据编码基础
    6 主题|小节
  26. 第二十六课:位运算基础
    6 主题|小节
课 19, 主题|小节 5
进行中

19.5 构造最大数和最小数

2025年9月22日
课 进展
0% 完成

“现在让我们学习如何用给定的数字构造最大数和最小数,”我说道,”这需要巧妙地运用排序!”

19.5.1 n个一位数能够组成的最大数和最小数

题目描述: 请问n个一位数能够组成的最大的整数和最小的整数是多少。比如,n=3,3个整数为1、3、9,那么组成的最大整数是931,最小数是139。比如,n=4,4个整数为2、8、0、6,那么组成的最大整数是8620,最小数是2068。

输入格式: 第一行为一个整数n(n<10)。第二行为n个一位数。

输出格式: 第一行输出最大整数,第二行输出最小整数。

样例

  • 输入:4 7 3 4 4 输出:7443 3447
#include<bits/stdc++.h>
using namespace std;

int main(){
    int a[15];
    int n;
    cin >> n;
    
    // 输入n个一位数
    for(int i = 1; i <= n; i++){
        cin >> a[i];
    }
    
    // 对数组进行升序排序
    sort(a+1, a+1+n);
    
    // 构造最大数:从大到小取数字
    int m = 0;
    for(int i = n; i >= 1; i--){
        m = m * 10 + a[i];  // 将数字逐位组合
    }
    cout << m << endl;
    
    // 构造最小数:处理前导零问题
    int k = 1;
    while(a[k] == 0) k++;  // 找到第一个非零数字
    swap(a[1], a[k]);      // 与第一位交换,避免前导零
    
    m = 0;
    for(int i = 1; i <= n; i++){
        m = m * 10 + a[i];  // 重新组合成最小数
    }
    cout << m;
    
    return 0;
} 

算法解析

  1. 先对数组升序排序
  2. 最大数:从排序后的末尾开始取数字,逐位构造
  3. 最小数:从排序后的开头取数字,但需处理前导零
  4. 如果首位是0,与第一个非零数字交换位置
  5. 使用数学方法m = m × 10 + digit组合数字