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 |
1234.....n的这种序列,给定位数值,求该位数的数字的方法//很有规律的,对于本题,求到万就可以 //关于pos的获得,可以使用2分,我直接求解了5个一元2次方程,不需要打表,直接迅速 // 仅供参考 void GetDigit(int pos) { if(pos<=9) printf("%d\n",pos); else if(pos<=189) { if((pos-9)%2==0) printf("%d\n",((pos-9)/2-1)%10); else printf("%d\n",(pos-9)/20+1); } else if(pos<=2889) { if((pos-189)%3==0) printf("%d\n",((pos-189)/3-1)%10); else if((pos-189)%3==2) printf("%d\n",((pos-189)/30)%10); else printf("%d\n",(pos-189)/300+1); } else if(pos<=38889) { if((pos-2899)%4==0) printf("%d\n",((pos-2889)/4-1)%10); else if((pos-2899)%4==3) printf("%d\n",((pos-2889)/40)%10); else if((pos-2899)%4==2) printf("%d\n",((pos-2889)/400)%10); else printf("%d\n",(pos-2889)/4000+1); } else { if((pos-38889)%5==0) printf("%d\n",((pos-38889)/5-1)%10); else if((pos-38889)%5==4) printf("%d\n",((pos-38889)/50)%10); else if((pos-38889)%4==3) printf("%d\n",((pos-38889)/500)%10); else if((pos-38889)%4==2) printf("%d\n",((pos-38889)/5000)%10); else printf("%d\n",(pos-38889)/50000+1); } } int main() { double tmp=6050195089.0; int t; int num; int row; int m; int pos; while(scanf("%d",&t)!=EOF) { while(t--) { scanf("%d",&num); if(num<=45) { m=num; row=(int)((sqrt(8.0*m+1)-1)/2); pos=m-row*(row+1)/2; if(pos==0) printf("%d\n",row); else printf("%d\n",pos); } else if(num<=9045) { m=num-45; row=(int)(sqrt(m+25)-5); pos=m-row*row-10*row; if(pos==0)printf("%d\n",(row+9)%10); else GetDigit(pos); } else if(num<=1395495) { m=num-9045; row=(int)((sqrt(145161+24.0*m)-381)/6); pos=m-(3*row*row+381*row)/2; if(pos==0) printf("%d\n",(row+99)%10); else GetDigit(pos); } else if(num<=189414495) { m=num-1395495; row=(int)((sqrt(8.0*m+8357881)-2891)/4); pos=m-2*row*row-2891*row; if(pos==0) printf("%d\n",(row+999)%10); else GetDigit(pos); } else { m=num-189414495; row=(int)((sqrt((double)(tmp +40.0*m))-77783)/10); pos=m-2.5*row*row-38891.5*row; if(pos==0) printf("%d\n",(row+9999)%10); else GetDigit(pos); } } } return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator