题意:一串有有数字构成且有数学规律的字符串,求出第n个字串是什么。
题解:首先一个字符串的定位是重点,然后需要数学知识每个数字的占的位数有log10(i)可以得得出,慢慢的向所要求的位置靠近
算法分类:数学。
代码是从网上看到和自己思路一样的代码学来的,寻找1的位置。
代码:
#include <stdio.h>
#include <math.h>
int main()
{
int t;
unsigned long n;
unsigned long now,last;
double i;
int j,k;
scanf("%d",&t);
while(t--)
{
now=0;
last=0;
i=0;
scanf("%ld",&n);
while(now<n)
{
last+=(int)log10(++i)+1;//last指每一个由1开始的字符串的长度
now+=last;//now指每一个有规律的字符串最后一个字符的长度
// printf("%ld %ld !/n",last,now);
}
now-=last;//now的位置跑过了 回到最后now+1即为新的1开始的位置
n-=now;//减小n的范围
now=0;
i=0;
while(now<n)//逐步的向要求的靠近
{
now+=(int)log10(++i)+1;
}
now-=(int)log10(i)+1;//加多了 减回去
n-=now;
j=(int)log10(i)+2;
j=j-n;
for(k=1;k<j;k++)
i=i/10;
j=(int)i;
j%=10;
printf("%d/n",j);
}
return 0;
}