poj 2000 Gold Coins

Time Limit: 1000MS Memory Limit: 30000K
Total Submissions: 13643 Accepted: 8495

  本题有一个小小的规律就是1*1+2*2+3*3+.........+(x-1)*(x-1)(x由(x+1)*x/2>n算出)有可能(x+1)*x/2!=n此时令s=(x+1)*x/2;sum=sum+(x-(s-n))*x

代码:

 

  
    
1 #include < stdio.h >
2   int main()
3 {
4 int n,s,i,sum,j;
5 while (scanf( " %d " , & n) != EOF)
6 {
7 i = 0 ;s = 0 ;sum = 0 ;
8 if (n == 0 )
9 break ;
10 while (s < n)
11 {
12 i ++ ;
13 s = (i + 1 ) * i / 2 ;
14 }
15 for (j = 1 ;j < i;j ++ )
16 sum = sum + j * j;
17 sum = sum + (i - s + n) * i;
18 printf( " %d %d\n " ,n,sum);
19 }
20 return 0 ;
21 }
22

 

你可能感兴趣的:(poj)