现在的位置: 首页 > 综合 > 正文

10706 – Number Sequence

2013年01月30日 ⁄ 综合 ⁄ 共 911字 ⁄ 字号 评论关闭
描述:题目的意思就是给你一个数,输出这个数的位置为什么数,当然,规律很简单,就是从小一直递增起来的,我的思路就是把这些数全都暴出来,然后查询就可以了
#include <cstdio>
#include <cstdlib>
long num[40000];
char str[1000000];
long count,n,m;
void solve()
{
    num[1]=1;
    count=2;
    str[1]='1';
    for(int i=2; i<40000; i++)
        if(i<10)
        {
            num[i]=num[i-1]+1;
            str[count++]=i+'0';
        }
        else if(i<100)
        {
            num[i]=num[i-1]+2;
            str[count++]=i/10+'0';
            str[count++]=i%10+'0';
        }
        else if(i<1000)
        {
            num[i]=num[i-1]+3;
            str[count++]=i/100+'0';
            str[count++]=(i/10)%10+'0';
            str[count++]=i%10+'0';
        }
        else if(i<10000)
        {
            num[i]=num[i-1]+4;
            str[count++]=i/1000+'0';
            str[count++]=(i/100)%10+'0';
            str[count++]=(i/10)%10+'0';
            str[count++]=i%10+'0';
        }
        else
        {
            num[i]=num[i-1]+5;
            str[count++]=i/10000+'0';
            str[count++]=(i/1000)%10+'0';
            str[count++]=(i/100)%10+'0';
            str[count++]=(i/10)%10+'0';
            str[count++]=i%10+'0';
        }
}
int main()
{
    solve();
   // freopen("a.txt","r",stdin);
    scanf("%ld",&n);
    while(n--)
    {
        scanf("%ld",&m);
        long i;
        for(i=1;; i++)
            if(m>num[i]) m-=num[i];
            else break;
        printf("%c\n",str[m]);
    }
    return 0;
}

抱歉!评论已关闭.