首页 > 编程语言 > 详细

PAT Basic 1023 组个最?数 (20) [贪?算法]

时间:2020-01-31 16:43:34      阅读:55      评论:0      收藏:0      [点我收藏+]

题目

给定数字0-9各若?个。你可以以任意顺序排列这些数字,但必须全部使?。?标是使得最后得到的数尽可能?(注意0不能做?位)。例如:给定两个0,两个1,三个5,?个8,我们得到的最?的数就是10015558。现给定数字,请编写程序输出能够组成的最?的数。
输?格式:
每个输?包含1个测试?例。每个测试?例在??中给出10个?负整数,顺序表示我们拥有数字0、数字1、……数字9的个数。整数间??个空格分隔。10个数字的总个数不超过50,且?少拥有1个?0的数字。
输出格式:
在??中输出能够组成的最?的数。
输?样例:
2 2 0 0 0 3 0 0 1 0
输出样例:
10015558

题目分析

已知0-9数字的个数,至少有一个非0数,求最小组合数,首位不可以是0

解题思路

  1. 贪心思想:依次取当前最小的数字作为高位
  2. 输入时用变量k,记录最小非0数字作为首位
  3. 打印首位数字k,并ts[k]--(k次数--)
  4. 遍历数组,依次取当前最小数字作为高位

注意点

因为题目已知最少有一个非0数,所以全0的情况不需要特殊考虑

Code

Code 01

#include <iostream>
#include <algorithm>
using namespace std;
int main(int argc, char * argv[]) {
    int k=0,ts[10]= {0};
    for(int i=0; i<10; i++) {
        scanf("%d",&ts[i]);
        if(ts[i]>0&&i!=0&&k==0)k=i;
    }
    printf("%d",k);
    ts[k]--;
    for(int i=0; i<10; i++) {
        for(int j=0; j<ts[i]; j++)printf("%d",i);
    }
    return 0;
}


PAT Basic 1023 组个最?数 (20) [贪?算法]

原文:https://www.cnblogs.com/houzm/p/12245575.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!