您的位置:首页 > 其它

hdoj2058 The sum problem

2016-01-20 22:45 369 查看

The sum problem

Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)

Total Submission(s): 20430    Accepted Submission(s): 5999


[align=left]Problem Description[/align]
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.
 

[align=left]Input[/align]
Input contains multiple test cases. each case contains two integers N, M( 1 <= N, M <= 1000000000).input ends with N = M = 0.

 

[align=left]Output[/align]
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.

 

[align=left]Sample Input[/align]

20 10
50 30
0 0

 

[align=left]Sample Output[/align]

[1,4]
[10,10]

[4,8]
[6,9]
[9,11]
[30,30]

 
解题思路:利用等差求和公式算出a ,b 然后利用等差求和公式判断满足输出

#include <stdio.h>
#include <math.h>
int main()
{
int n,m,i,a,b;
while(scanf("%d %d",&n,&m)!=EOF && n!=0 && m!=0)
{
for(i=sqrt(2*m);i>=1;i--)
{
a = m/i + (1 - i)/2;//利用S = na + n(n-1)/2 求的a
b = a + i - 1;//因为公差d = 1,所有n = b - a + 1
if((a + b)*i == 2*m)//利用S = (a+b)n/2
printf("[%d,%d]\n",a,b);
}
printf("\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: