UVa 1225 - Digit Counting

昨天上午开始写的,后来遇到了问题,RE了两次,就一直没做,今天Ac了455之后,换了个思路,把这个Ac了。


#include <stdio.h>
#include <string.h>
#define maxn 40000
int main ()
{
    int n,t,i,j,count,first;
    char a[maxn];
    int b[10][2]={0};
    scanf("%d",&t);
    while(t--)
    {
        memset(a,0,sizeof(a));
        count=0;
        first=1;
        for(i=0;i<10;i++)
        {
            b[i][0]=i;
            b[i][1]=0;
        }
        scanf("%d",&n);
        if(n>=10)
        {
            for(i=1;i<10;i++)
            {
                a[count]=i+48;
                count++;
            }
            if(n>=100)
            {
                for(i=10;i<100;i++)
                {
                    a[count]=i/10+48;
                    count++;
                    a[count]=i%10+48;
                    count++;
                }
                if(n>=1000)
                {
                    for(i=100;i<1000;i++)
                    {
                        a[count]=i/100+48;
                        count++;
                        a[count]=(i%100)/10+48;
                        count++;
                        a[count]=i%10+48;
                        count++;
                    }
                    for(i=1000;i<n+1;i++)
                    {
                        a[count]=i/1000+48;
                        count++;
                        a[count]=(i%1000)/100+48;
                        count++;
                        a[count]=(i%100)/10+48;
                        count++;
                        a[count]=(i%10)+48;
                        count++;
                    }
                }
                else
                {
                    for(i=100;i<n+1;i++)
                    {
                        a[count]=i/100+48;
                        count++;
                        a[count]=(i%100)/10+48;
                        count++;
                        a[count]=i%10+48;
                        count++;
                    }
                }
            }
            else
            {
                for(i=10;i<n+1;i++)
                {
                    a[count]=i/10+48;
                    count++;
                    a[count]=i%10+48;
                    count++;
                }
            }
        }
        else
            for(i=1;i<n+1;i++)
            {
                a[count]=i+48;
                count++;
            }
        for(i=0;i<10;i++)
        {
            for(j=0;j<maxn;j++)
            {
                if(!a[j])
                    break;
                if(b[i][0]==a[j]-48)
                    b[i][1]++;
            }
        }
        for(i=0;i<10;i++)
        {
            if(first)
            {
                printf("%d",b[i][1]);
                first=0;
            }
            else
                printf(" %d",b[i][1]);
        }
        printf("\n");
    }
    return 0;
}


你可能感兴趣的:(UVa 1225 - Digit Counting)