首页 > 代码库 > 和为n 连续正数序列

和为n 连续正数序列

题目如下:

题目:输入一个正数n,输出所有和为n 连续正数序列。

例如输入15,由于1+2+3+4+5=4+5+6=7+8=15,所以输出3 个连续序列1-5、4-6 和7-8。

看见这个题目,我首先想到的是等差数列求和,首先我开始想了一下的等差数列求和的公式(说实话,我忘记了偷笑),得到公式是这样的Sn=n*a1+n*(n-1)d/2

对于这道题目毫不疑问的是公差d=1,所以相对于此题目就有Sn=n*a1+n*(n-1)/2(a1>0而为正整数),那么问题就来了:学挖掘机.....


所以我们只要保证a1在正常的范围内,那么这道题目就解出来了

看代码:

public static void test(){
		Scanner sc=new Scanner(System.in);
		
		System.out.println("input-------");
		int sum=sc.nextInt();
		System.err.println("sum:"+sum);
		
		int na1=0,n=0;//数列n项 和首项*n
		while(true) {
			n++;
			na1=sum-(n*(n-1)/2);
			if(na1/n<=0||(na1%n)!=0){//如果有余数或者不为正整数
				//flag=1;
				System.out.println("如果有"+n+"项不能组成");
			}else{
				for (int j = 0; j < n; j++) {
					System.out.print((na1/n+j)+" ");
					
				}System.out.println();
			}
		
			if(n>=sum){
				break;
			}
			
		}
	}

那么这样就解决了,我看了看其他的算法,一些使用链表的形式,来维护一个start和end指针,其实我觉得都差不多,希望有更好的方法来解决问题



转载请注明地址:http://blog.csdn.net/a837199685/article/details/39855357

和为n 连续正数序列