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. InputInput contains multiple test cases. each case contains two integers N, M( 1 <= N, M <= 1000000000).input ends with N = M = 0.
OutputFor 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]
这个题刚开始的时候不会做,不知道从哪里入手,递加的话好像不太实际,也没有可执行的操作,所以就去看了一下网上的代码,发现可以用数列的公式做。首先对于sum=n*a1+n*(n-1)/2,利用for循环从i=0遍历到i*(i-1)<2*sum,判断条件为(2*sum-i*(i-1))%i==0;然后就可得出i和区间得出答案。还有需要注意的就是这样得出来的结果是从大到小的,可以用到简单的方法就是把答案存进二维数组里然后输出。代码如下: #include <stdio.h>
#include <stdlib.h> int main()
{
int i,n,f,j,a[100][2],k,a1,m;
while(scanf(“%d%d”,&m,&n)&&(m||n))
{
j=0;
for(i=1;i*(i-1)<2*n;i++)
{
f=(2*n-i*(i-1))/2;
if(f%i==0)
{
a1=f/i;
k=i-1;
a[j][0]=a1;a[j][1]=a1+k;j++; }
}
for(i=j-1;i>=0;i–)
{
printf(“[%d,%d]\n”,a[i][0],a[i][1]);
}
printf(“\n”);
}
return 0;
}