栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

1023 组个最小数(用C语言精简的解决每日两题)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

1023 组个最小数(用C语言精简的解决每日两题)


先放第一个,思路就是先数组存储,然后找到第一个不为零的数输出,然后再输出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)的区别
这些小细节还是挺致命的

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/312376.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号