将一个整数转换为若干连续整数的和

该博客探讨如何将一个正整数表示为多个连续正整数的和,通过数学分析得出两种连续整数序列的形式,并提供了一种简单的程序实现。博主强调了结合数学思维来优化计算机程序的重要性。
摘要由CSDN通过智能技术生成


======题外话:我们不仅要有计算机思维,还要运用其他思维,比如:数学思维,来简化或优化我们的计算机程序


题目:输入一个正整数,若该数能用几个连续正整数之和表示,则输出所有可能的正整数序列。

一个正整数有可能可以被表示为n(n>=2)个连续正整数之和,如:
15=1+2+3+4+5
15=4+5+6
15=7+8



直观反应:循环循环在循环,结果终究会出来的。敲打


先进行数学上的分析:


我们要将一个数num表示为若干连续整数的和,那么,考虑一下,这些连续整数应该怎样开始、怎样结束?

形式一:a a+1 a+2 …… a+(n-1)

              那么a的范围很容易就是:[1,num/2+1)

形式二:b-(n-1) …… b-2 b-1 b

              那么b的范围为:(Math.sqrt(2*num)-1),num/2+1  


我们可以从这两个形式分别写程序,或两种都实现,得到一个数后,可以判断一下哪种循环次数要少一点,就采用哪种。


下面就是一个比较简单的程序。上面的修修改改有的是为了更优化,有的是上一种形式的残留的注释,不用太在意。


package t1;

import java.util.Scanner;

public class T1 {
	@SuppressWarnings("resource")
	public static void main(String[] args) {
		
		//得到要分析的正整数num
		Scanner scanner = new Scanner(System.in);
		int num = scanner.nextInt();
		if (num<3) {
			return;
		}
		
		//确定最大值界限
		//int min = (int) (Math.sqrt(2*num)-1);
		int min = 1;
		int max = num/2+1;
		
		int reNum = 0;
		while (min<max) {
			//String r = addnums(num, max--);
			String r = addnums(num, min++);
			if (r!=null) {
				System.out.println(r);
				reNum++;
			}
		}
		
		if (reNum==0) {
			System.out.println("NONE");
		}
		
	}

	public static String addnums(int num,int min){
//		int max = num/2+1;
		StringBuilder result = new StringBuilder("");
//		String result = "";
		int total = 0 ; 
		while (total<num) {
//			if (
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值