先放第一个,思路就是先数组存储,然后找到第一个不为零的数输出,然后再输出0,然后再输出别的数字
#include#include int main(){ int n[10]; char s[51]=""; int flag=0; for(int i=0;i<10;i++) scanf("%d",&n[i]); for(int i=0;i<10;i++) { if(n[i]&&i!=0&&flag==0){ //如果这个数的个数不为零并且也不是0而且是第一个不为零的数 flag=1; //flag就是用来用来判断是不是第一个不为零的数 sprintf(s,"%s%d",s,i); //把数放进s里 n[i]--; //第一个不为零的数个数要-1 i--; //注意这里需要把i向后退一位 while(n[0]--) //再把0放进s sprintf(s,"%s%d",s,0); continue; //可以跳出这层循环了,表示已经存进了第一个不为零的数和所有的0 } else if(n[i]&&flag) //个数不为零,flag=1表示第一步已经完成了,可以放心处理其他数字了 while(n[i]--) sprintf(s,"%s%d",s,i); //放进s即可,如果没有第一步的i--,可能会导致第一个不为零的数字少放的问题 } printf("%s",s); //最后打印s就好了 return 0; }
上面的方法很常规,但是略显麻烦,其实我们也可以边输入边输出,这样就不用另外的数组去存储了
#include#include int main(){ int n0,num; scanf("%d",&n0); //先输入0的数目 for(int i=1;i<=9;i++){ //再输入一到九的数目 scanf("%d",&num); if(num&&n0){ //先输出第一个数字和那几个0 printf("%d",i); num--; //输出了一个所以要减一 while(--n0){ //输出0,注意不要写成n0-- printf("%d",0); } } while(num--) //输出不为0的那些数字 printf("%d",i); } return 0; }
1.为啥不写成while(n0- -)?
这样写的话,当这个循环结束的时候n等于-1,待到下次进入循环的时候就变成死循环了
而–n0就不一样了,贴一个 while(n–)和while(–n)的区别
这些小细节还是挺致命的



