Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

Re:将大牛的修改了下,加了点注释,这样可能好理解点

Posted by lshguang89 at 2008-09-10 15:39:06 on Problem 1019
In Reply To:将大牛的修改了下,加了点注释,这样可能好理解点 Posted by:fbixiaozc135 at 2007-08-08 15:36:25
> #include <string.h>
> #include <stdio.h>
> 
> int main()
> {
>     int a[5]={0, 45, 9045, 1395495, 189414495};
>     int b[5]={0, 9, 189, 2889, 38889};
>     int c[5]={0, 10, 100, 1000, 10000};
>     unsigned long i,j,k,n,t;
>     scanf("%d",&t);
> 	while(t--)
>     {
>         scanf("%d",&n);
>         for ( i = 1; i < 5; i++)
>         if (n <= a[i]) break;                 //所在的行数为 i位数
>         n -= a[i - 1];
>         for (k = 0, j = 1; k < n; j++)
>             k = b[i - 1] * j + i * j * (j + 1) / 2;  //等差数列求和公式,找到具体的区间位置    
>         --j;           
>         n = n - b[i - 1] * (j - 1) - i * j * (j - 1) / 2;     //在该数中寻找最终的位置 
>         for(i = 1; i < 5; i++)
>         if (n <= b[i]) break;                //通过位置来确定最终这个数是几位数
>         if (i == 1)         //如果是1位数,直接输出
> 			printf("%d\n",n);
>         else                              //求得在该数的一排中 最后更新了的序号n对应的数字
>         {
>           n -= b[i-1];   
> 	/*要找的数最终在的位置的真正的数比如11的位置是4,这里k就等于11 */
>           k = (n-1) / i + c[i-1];
> 		 char str[10];
>          sprintf(str,"%d",k); //将数字转换成字符串
>          n -= (n - 1) / i * i; 
> 		 printf("%c\n",str[n - 1]);
>         }
>     }    
>     return 0;
> }

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator