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; }
相关文章推荐
- Android 在fragment显示调用的方法
- SQL基础知识
- 实战c++中的string系列--十六进制的字符串转为十六进制的整型(通常是颜色代码使用)
- Swift学习之路03-基础,闭包
- 关于共享内存的使用
- 微服务与SOA的实践应用对比
- 实战c++中的string系列--十六进制的字符串转为十六进制的整型(通常是颜色代码使用)
- IOS程序的启动过程
- c#桌面程序
- 样条曲线概述
- Find the Minimum Element in A sorted and Rotated Array
- 减少HTTP请求之合并图片详解(大型网站优化技术)
- [Swift开发实战]-闭包
- UML图中类之间的关系
- Maven私服的搭建
- MySQL中的Multi-Range Read优化
- linux查看进程的启动时间
- Multiple annotations found at this line: - ArtifactTransferException: Could not transfer artifact o
- Magic Spheres
- 如何用angularjs制作一个完整的表格之二__表格分页功能