PAT 乙级 1023 组个最小数 v1.0
1. 题目简述及在线测试位置
1.1 根据 给定的个位数 组一个最小数(0也要出现,但不能处于首尾)。比如:给定两个 0,两个 1,两个 5,我们得到的最小的数就是 100155
1.2 输入:在一行中给出 10 个非负整数,顺序表示我们拥有数字0、1、… 9 的个数,数字之间用空格分隔。10 个数字的总个数不超过 50,且至少拥有 1 个非 0 的数字
1.3 在线测试位置:PAT 1023 组个最小数
2. 基本思路
通过输入数据得到 给定的个位数 ,将它们存储到数组中,对数组从小到大排序。随后按要求打印数组元素:0出现在非首尾
3. AC代码
#include <algorithm>
#include <iostream>
using namespace std;
#define MAX 10 //输入:在一行中给出 10 个非负整数, 10 个数字的总个数不超过 50
#define Size 50
int a[Size]; //用于存储给定的个位数
int main()
{
int data,count=0,ZeroNumber=0,k=0; //输入数据 数组a的计数 0的计数 数组a标记位
for (int i = 0; i < MAX; i++)
{
cin >> data;
while (data--)
a[count++] = i;
}
sort(a, a + count); //从小到大排序
for (k = 0; k < count; k++) //统计0的个数
{
if (!a[k])
ZeroNumber++;
else
break;
}
cout << a[k++]; //按要求打印最小数字:0不能做数字首尾
while(ZeroNumber-- > 0)
cout << "0";
for (; k < count; k++)
cout << a[k];
return 0;
}