算法训练 连续正整数的和

问题描述

78这个数可以表示为连续正整数的和,1+2+3,18+19+20+21,25+26+27。
  输入一个正整数 n(<=10000)
  输出 m 行(n有m种表示法),每行是两个正整数a,b,表示a+(a+1)+…+b=n。
  对于多种表示法,a小的方案先输出。

样例输入

78

样例输出

1 12
18 21
25 27

思路

根据公差为1的等差数列前n项公式Sn = n * a1 + n * (n - 1) / 2
外循环控制a1,内循环控制n进行枚举
如果和为输入的数则 进行输出

代码

import java.util.Scanner; 
public class Sum {
	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		int n = input.nextInt();
		input.close();
		sum(n);
	}
	public static void sum(int num) {
		for (int a1 = 1; a1 < num; a1++) {
			for (int n = 1; n < num; n++) {
				int sum = n * a1 + n * (n - 1) / 2;
				if(sum == num) {
					System.out.println(a1 + " " + (a1 + n - 1));
					break;
				}
					
			}
		}
	}

}

发布了33 篇原创文章 · 获赞 3 · 访问量 3783

猜你喜欢

转载自blog.csdn.net/qq_43169220/article/details/103657389