题目如下:
题目:输入一个正数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
原文地址:http://blog.csdn.net/a837199685/article/details/39855357