0. 比luonuo的代码稍微简洁一点
1. 题目
2. 分析
基本思路就是储存数字个数,然后因为0不能在首位,所以先打印首个非0的数字,(再将其个数-1),然后按顺序从0开始依次打印数字。
按ln的思路是首先打印首个非0的数字,再打印0,再打印剩余(前面已经打印了一个了)首个非0的数字,然后再按顺序依次打印其余数字。
3. 代码
#include <iostream>
using namespace std;
int main(int argc, char **argv)
{
int counts[10];
for(int i=0;i<10;i++){
cin>>counts[i];
}
for(int i=1;i<10;i++){
if(counts[i]!=0){
cout<<i;
counts[i]--; //灵魂在这,如此便不用记录位置
break;
}
}
for(int i=0;i<10;i++){
for(int j=0;j<counts[i];j++){ //且保证了这里依次打印时数字个数是对的
cout<<i;
}
}
return 0;
}
ln版:
#include <iostream>
using namespace std;
int main()
{
int a[10], t;
for (int i = 0; i < 10; i++)
cin >> a[i];
for (int i = 1; i < 10; i++)
{
if (a[i] != 0)
{
cout << i;
t = i;
break;
}
}
for (int i = 0; i < a[0]; i++)
cout << 0;
for (int i = 0; i < a[t] - 1; i++)
cout << t;
for (int i = t + 1; i < 10; i++)
for (int k = 0; k < a[i]; k++)
cout << i;
return 0;
}