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 |
顶!In Reply To:我的思路,,,0MS,,,希望抛砖能引玉,,, Posted by:2011014326 at 2012-10-05 20:14:31 > /*我的思路: > 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