HDOJ2058_The sum problem
2017-10-14 15:50
417 查看
[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]
题目大意:从1到n的范围内,公差为1的数列的和是m 的数列,输出[a1,an],每组之间空一行
本题需要用到等差数列的公式
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]
题目大意:从1到n的范围内,公差为1的数列的和是m 的数列,输出[a1,an],每组之间空一行
本题需要用到等差数列的公式
import java.util.Scanner; public class P2058 { private static Scanner scanner; public static void main(String[] args) { scanner = new Scanner(System.in); while(scanner.hasNext()){ int n = scanner.nextInt(); int m = scanner.nextInt(); if(n==0 && m==0){ break; } // 从a 开始, 一直加到sqrt(2*m) > m //也就是 a是a1,i是an //sqrt()函数要求传入的是double类型数字 for (int i = (int) Math.sqrt(2 * m); i >= 1; i--) { int a = (m - (i * (i - 1)) / 2) / i; if (m == a * i + (i * (i - 1)) / 2) { System.out.println("[" + a + "," + (a + i - 1) + "]"); } } System.out.println(); } } } /* * 超时: * while(scanner.hasNext()){ int n = scanner.nextInt(); int m = scanner.nextInt(); if(n==0 && m==0){ break; } int sum = 0; for (int i = 1; i <= n; i++) { sum = i; if(sum == m){ System.out.println("["+i+","+i+"]"); break; } for (int j = i+1; j <= n; j++) { sum += j; if(sum == m){ System.out.println("["+i+","+j+"]"); break; } if(sum>m){ break; } } } * */
相关文章推荐
- HDOJ 2058 The sum problem(数学问题)
- hdoj-2058-the sum problem
- hdoj The sum problem 2058 (数学等差公式&技巧转换)
- HDOJ 2058 The sum problem(数学问题)
- HDOJ-2058 The sum problem
- hdoj-2058-the sum problem
- hdoj2058 The sum problem
- hdoj 2058 The sum problem【数列】
- (Java实现) HDOJ 2058 The sum problem 高斯求和
- HDOJ 2058 The sum problem(数学求和问题)
- HDOJ 2058 The sum problem
- HDOJ2058 The sum problem
- HDOJ 2058 The sum problem
- HDOJ 2058 The sum problem [效率分析]
- hdoj2058 The sum problem
- HDOJ 2058 The sum problem
- HDOJ 2058 The sum problem
- hdoj2058(the sum problem
- HDOJ 2058 The sum problem (数学题)
- HDOJ-2058(The sum problem)(找规律)(数学)