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.       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;

}

    原文作者:分支限界法
    原文地址: https://blog.csdn.net/zhuge2017302307/article/details/79184502
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞