一本书的页码从自然数1开始编码直到自然数n。书的页码按照通常的习惯编排,每个页码都不含多余的前导数字0。

一本书的页码从自然数1开始编码直到自然数n。书的页码按照通常的习惯编排,每个页码都不含多余的前导数字0。
*输入:n
输出:共十行,分别为0-9出现的次数。

1.暴力法

#include
int main()
{
    int n,a[10]= {0},j,m,i;
    scanf("%d",&n);
    for(i=1; i<=n; i++)
    {
        j=i;
        while(j)
        {
            m=j%10;
            a[m]++;
            j=j/10;
        }
    }
    for(i=0; i<10; i++)
        printf("%d ",a[i]);
    return 0;
}

一说到暴力法很多人都会直接想到for循环一直循环,导致代码会很长,但若用一个while,将会大大缩短代码的长度。

2.区间法

#include
#include
int main()
{
    int a[10]= {0},b[10]= {0},n,m,i=1,k=0,j,h,p,sum;
    scanf("%d",&n);
    while(n!=0)
    {
        m=n%10;
        a[i]=m;
        n/=10;
        k++;
        i++;
    }
    h=k;
    for(j=0; j

区间法的思路就稍微大一点,利用for就可轻松解决(也可以利用递归的方法)。但不知道为什么,数字稍微大一点时,用codeblocks运行结果就会出错,但用别的编译器运行,就没什么问题了。

你可能感兴趣的:(算法,c语言)