欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-04-08 09:13:39
...

一、题目

【算法竞赛 入门经典】习题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;
}
相关标签: 算法训练