Number Sequence (排列组合)

来源:互联网 发布:软件系统验收规范 编辑:程序博客网 时间:2024/06/05 13:32

大致题意:

有一串数字串,其规律为

1 12 123 1234 12345 123456 1234567 12345678 123456789 12345678910 1234567891011 123456789101112······k

输入位置n,计算这一串数字第n位是什么数字,注意是数字,不是数!例如12345678910的第10位是1,而不是10,第11位是0,也不是10。总之多位的数在序列中要被拆分为几位数字,一个数字对应一位。

#include <iostream>#include<cstring>#include<cstdio>#include<algorithm>#include<cmath>using namespace std;const int maxn=32000;long long a[maxn],s[maxn];int main(){    a[1]=s[1]=1;    for(int i=2;i<maxn;i++)    {        a[i]=a[i-1]+(int)log10((double)i)+1;//a为第i个数组的长度        s[i]=s[i-1]+a[i];//s是前i个数组的长度    }    int n,t;    scanf("%d",&t);    while(t--)    {        scanf("%d",&n);        int i=1;        while(s[i]<n)//确定n的位置出现在第i组            i++;        int pos=n-s[i-1];//pos为n在第i组的位置        int len=0;        for(i=1;len<pos;i++)            len+=(int)log10((double)i)+1;//从第1组开始遍历第i前的每一个组,利用log10(i)+1递推第i组的长度        printf("%d\n",(i-1)/(int)pow((double)10,len-pos)%10);    }}


0 0
原创粉丝点击