题意 :输入第一行每个数的意思是,0到9的个数,这每个数都要用到,输入组成最小的数
如 2 2 0 0 0 3 0 0 1 0意思是
0 1 2 3 4 5 6 7 8 9
2 2 0 0 0 3 0 0 1 0,即0有2个,1有2个,5有3个,8有一个的意思,所以组成最小为10015558(首位数字不唯一);
思路:运用贪心的思想,每一位最优解(基本最优以至于全局最优),结果就是最优。
代码:
#include<iostream>
using namespace std;
int main(){
const int n=10;
int a[n]={0},num=0;
for(int i=0;i<n;i++){
cin>>a[i];
num+=a[i];//算出总个数,毕竟每个都要用到;
}
bool first=true;
while(num!=0){
for(int j=0;j<n;j++){
if(first==true&&j==0)continue;//如果是第一个数字,则不能为0;
if(a[j]>0){
cout<<j;
first=false;//输出一次就不是第一个了;
a[j]--;
num--;
break;
}
}
}
return 0;
}