Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
我的思路,,,0MS,,,希望抛砖能引玉,,,/*我的思路: 1.将长串数分成一个个部分,每个部分是从1到x的无重复的数字序列 2.每个序列比前一个序列多的位数是他的最后一个数的位数,如12345678910比123456789多最后一个10, 即多占了两位,由此可推算出任何一个序列的长度 3.输入位置n,则从1到n查找,每次位置移动一个序列的长度,如果第j个加上序列长度超过n,则输出j这个整数的从个位数第j-n+1位上的数字 */ #include<iostream> #define A0 j/10==0 #define A1 j/10!=0 #define B0 j/100==0 #define B1 j/100!=0 #define C0 j/1000==0 #define C1 j/1000!=0 #define D0 j/10000==0 #define D1 j/10000!=0 #define E0 j/100000==0 #define E1 j/100000!=0 using namespace std; int main() { unsigned int data[100000]={0}; int record[6]={0}; unsigned int n,num,i,i1,j,k,m,a,a1,b; cin>>n; while(n--) { cin>>num; data[0]=0; i=i1=0; for(j=1;;j++) { if(A0) k=1; if(A1&&B0) k=2; if(B1&&C0) k=3; if(C1&&D0) k=4; if(D1&&E0) k=5; if(E1) k=6; data[j]=data[j-1]+k; m=1; if(i+data[j]<num) i+=data[j]; else { m=num-i; for(a=1;a<=j;a++) { if(data[a]>=m) break; } a1=a; for(b=0;b<6;b++) { if(a1) { record[b]=a1%10; a1/=10; } } cout<<record[data[a]-m]<<endl; break; } } } return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator