算法 数字统计问题
作者:互联网
问题描述
一本书的页码从自然数1开始编码直到自然数n。书的页码按照通常的习惯编排,每个页码都不含多余的前导数字0. 例如,第8页用数字8表示,而不是08或者008之类。 数字统计问题要求对给定书的总页码n,计算出书的全部页码中分别出现了多少次数字0,1,2,…,9。
解法一:
这种算法就是老老实实的设置每一个数的计数器,然后如果相等,计数器就加一。
#include<stdio.h> void number(int n){ int count1=0,count2=0,count3=0,count4=0,count5=0,count6=0,count7=0,count8=0,count9=0,count0=0; for(int i=1;i<=n;i++){ int m=i; while(m){ int j=m%10; if(j==1){ count1++; } else if(j==2){ count2++; } else if(j==3){ count3++; } else if(j==4){ count4++; } else if(j==5){ count5++; } else if(j==6){ count6++; } else if(j==7){ count7++; } else if(j==8){ count8++; } else if(j==9){ count9++; } else{ count0++; } m=m/10; } } printf("The result is\n"); printf("%d\n%d\n%d\n%d\n%d\n%d\n%d\n%d\n%d\n",count0,count1,count2,count3,count4,count5,count6,count7,count8,count9); } int main(){ printf("Please input the pagecount"); int n; scanf("%d",&n); printf("%d\n",n); number(n); }
解法二:
解法二就比较巧妙,发现得出的每一位数其实可以看成数组的角标,而数组里面的每一位数即为0-9出现次数的计数器
#include<stdio.h> void number(int n){ int arr[10]={0}; for(int i=1;i<=n;i++){ int m=i; while(m!=0){ int j=m%10; arr[j]++; m=m/10; } } printf("The result is\n"); for(int i=0;i<10;i++){ printf("%d\n",arr[i]); } } int main(){ printf("Please input the pagecount\n"); int n; scanf("%d",&n); printf("%d\n",n); number(n); }
标签:数字,int,计数器,算法,一位数,解法,页码,统计 来源: https://www.cnblogs.com/Celiachen/p/14714482.html