题意:按规律给了你一些数字,让你找出第n位数是多少?
思路:打表和简单的推理….
费了我大半天的时间..真是不在状态啊…
#include<stdio.h>
#include<iostream>
using namespace std;
#define maxN 40010
long long key[maxN],wi[maxN],nu[maxN];
int m;
void fun()
{
int mm=0;
for(int i=1;i<maxN;i++)
{
int k=i,w=0;
while(k){
w++;
k/=10;
}
wi[i]=w;
mm+=w;
nu[i]=mm;
key[i]=key[i-1]+mm;
}
}
void solve()
{
int l=1,r=40000;
while(l+1!=r){
int mid=(l+r)/2;
if(key[mid]>m)r=mid;
else l=mid;
}
if(key[l]==m)
printf("%d\n",l%10);
else{
m=m-key[l];
for(int i=1;i<40000;i++){
if(nu[i-1]<m&&nu[i]>=m){
int len=m-nu[i-1];l=i;
for(int j=1;j<=wi[i]-len;j++)
l/=10;
printf("%d\n",l%10);
break;
}
}
}
}
int main()
{
fun();
int t;
scanf("%d",&t);
while(t--){
scanf("%d",&m);
solve();
}
}