【算法竞赛 入门经典】习题3-3 数数字(Uva125)

一、题目

在这里插入图片描述

二、解题思路

题目的意思是对输入的N,将1-N顺序排列起来,计算其中0-9各数字出现的次数,本来打算找规律,但是看到N<10000,就选择了暴力解法,直接采用循环去统计1-N每一个数字中出现0-9的次数,加起来就是总的次数。
重点在于用count数组来统计0-9各数字出现的次数。然后就是要注意输出的格式,最后一个数字后面不应该有空格

三、代码

#include<stdio.h>
#include<string.h>
using namespace std;
int main(){
 int count[10];//用于记录0~9各数字出现的次数 
 int T,N;
 scanf("%d",&T);
 while(T--){
  memset(count,0,sizeof(count));
  scanf("%d",&N);
  for(int i=1;i<=N;i++){ //由于N<10000,所以采用了暴力求解,对1-N的每一个数字进行统计 
   if(i<10){
    count[i]++;
   }else if(i<100){
    count[i/10]++;
    count[i%10]++;
   }else if(i<1000){
    count[i/100]++;
    count[i/10%10]++;
    count[i%10]++;
   }else if(i<10000){
    count[i/1000]++;
    count[i/100%10]++;
    count[i/10%10]++;
    count[i%10]++;
   }
  }
  printf("%d",count[0]);//注意格式问题 
  for(int i=1;i<10;i++){
   printf(" %d",count[i]);
  }
  printf("\n");
 }
 return 0;
}
发布了91 篇原创文章 · 获赞 28 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/gyx1549624673/article/details/103110612