武汉科技大学计算机学院菜鸟杯:The sum problem (杭电2058)

来源:互联网 发布:淘宝男装店铺推荐日系 编辑:程序博客网 时间:2024/05/16 23:56

The sum problem

Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 10444    Accepted Submission(s): 3180


Problem Description
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 1050 300 0

Sample Output
[1,4][10,10][4,8][6,9][9,11][30,30]

 

 

代码如下:

/*找一个子序列的和便是M,那么这个子序列可以算作a+1, a+2, ... , a+d这时,d就为这个序列的长度,肇端数字就是a+1,而这个序列的和即M=a*d+(1+d)*d/2;得出d*d<2 * m,从而可以列举d,策画出a*/#include<stdio.h>#include <math.h>int main(){    int i,j,m,n;    while(scanf("%d%d",&n,&m),n&&m)    {        for(i=sqrt(2*m);i>0;i--)        {            j=m-(i+i*i)/2;            if(j%i== 0)            printf("[%d,%d]\n",j/i+1,j/i+i);        }        printf("\n");    }    return 0;}


 

原创粉丝点击