7E - The sum problem
Given a sequence 1,2,3,......N, your job is to calculate all the possible sub-sequences that the sum of the sub-sequence is M.
Input
Input contains multiple test cases. each case contains two integers N, M( 1 <= N, M <= 1000000000).input ends with N = M = 0.
Output
For each test case, print all the possible sub-sequence that its sum is M.The format is show in the sample below.print a blank line after each test case.
Sample Input
20 10 50 30 0 0
Sample Output
[1,4] [10,10] [4,8] [6,9] [9,11] [30,30]
// 遍历所有子列
1 #include<stdio.h> 2 int main() 3 { 4 int n, m, i,j, t, flag; 5 while(scanf("%d %d", &n, &m), !(n==0&&m==0)) 6 { 7 for(i=1;i<=n;i++) 8 { 9 flag=0; t=0; 10 for(j=i;j<=n;j++) 11 { 12 t+=j; 13 if(t==m) 14 { flag=1; break; } 15 if(t>m) break; 16 } 17 if(flag) printf("[%d,%d]\n", i, j); 18 } 19 printf("\n"); 20 } 21 return 0; 22 }
// 老老实实算吧
1 #include<stdio.h> 2 #include<math.h> 3 int main() 4 { 5 int n, m, i,j; 6 while(scanf("%d %d", &n, &m), !(n==0&&m==0)) 7 { 8 for(i=(int)sqrt(2.0*m);i>0;i--) // a1*n+n*(n-1)/2=(2*a1+(n-1))*n/2=m, 9 { // 又a1>=1, 则n<sqrt(2*m). 10 j=(2*m/i-i+1)/2; // a1=(2*m/n-n+1)/2 11 if((2*j+i-1)*i/2==m) 12 printf("[%d,%d]\n", j, i+j-1); 13 } 14 printf("\n"); 15 } 16 return 0; 17 }