`
to_zoe_yang
  • 浏览: 138758 次
  • 性别: Icon_minigender_2
  • 来自: 01
社区版块
存档分类
最新评论

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

阅读更多

题目:输入一个正数n,输出所有和为n 连续正数序列。
例如输入15,由于1+2+3+4+5=4+5+6=7+8=15,所以输出3 个连续序列1-5、4-6 和7-8。

 

 

思路:

就简单的方法就是两重循环,

算这两个标志之间的和!

 

代码:

public static int sum(int begin, int end) {
		return ((end - begin + 1) * (begin + end)) / 2;
	}

	public static void find(int number) {
		for (int i = 1; i < number; i++) {
			for (int j = i + 1; j < number; j++) {
				if (sum(i, j) == number) {
					System.out.println("From " + i + " to " + j);
				}
			}
		}
	}

 

 

但是很明显,这个方法每次要重复算的!

算1-3的和其实暗含多算一次1-2!

 

以15为例子,

我们最多算到8!

因为再往后,任意连续的两个数的和都大于15!

 

我们使用sum保持当前计算的数的和,并跟进sum和number的大小来改变其数值和进行相关的入队和出队!

像找15,

那么

1入队,和为1<15,那么继续入队

2入队,和为3<15,继续入队

直到5入队,和为15=15,那么输出对头标志和队尾标志,表面之间的数相加等于所要求的数,然后出队,并让sum减去对头,sum此时为14,则继续入队

6入队,和为20>15,那么出队,减去队头2,sum为为18>15,则继续出队,减去队头3,sum为15=15,符合条件,则出队,减去队头~

重复上诉操作,直到进队的数等于结束的数或者sum<15!

 

代码:

 

int number = 15;
		int end = (number+1)/2;
		System.out.println(end);
		int[] queue = new int[number];
		int head = 0;
		int tail = 0;
		int index = 1;
		int sum = 0;
		do {
			if (sum < number) {
				queue[tail++] = index;
				sum += index;
				System.out.println(index + ":" + sum);
				index++;
			}
			if (sum == number) {
				System.out.println("From " + (head + 1) + " to " + tail);
				sum -= queue[head];
				head++;
			} else if (sum > number) {
				sum -= queue[head];
				head++;
				if (sum == number) {
					System.out.println("From " + (head + 1) + " to " + tail);
					sum -= queue[head];
					head++;
				}
			}
		} while (index <= end || sum > number);

 

 

分享到:
评论

相关推荐

    python 和为s的连续正数序列,输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数

    # 输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。 # 序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。 # 输入示例 # 输入:target = 9 # 输出:[[2,3,4],[4,5]...

    wujie199#CS#57.2 和为 S 的连续正数序列1

    57.2 和为 S 的连续正数序列题目描述牛客网题目描述输出所有和为 S 的连续正数序列。例如和为 100 的连续序列有:[9, 10, 11, 12, 13,

    和为S的连续正数序列.md

    和为S的连续正数序列.md

    Python 面试题57 – II. 和为s的连续正数序列

    输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。 序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。 示例 1: 输入:target = 9 输出:[[2,3,4],[4,5]] 示例 2: ...

    just1296#leetcode#面试题57-II.和为s的连续正数序列1

    面试题57 - II. 和为s的连续正数序列输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。示例 1:输出:[

    和为s的连续正数序列1

    示例 1:输出:[[2,3,4],[4,5]]示例 2:输出:[[1,2,3,4,5],[4,5,6],[7,8]]当窗口的和小于 target 的时候,窗口的

    判断一个序列是否是图序列,并画图(python)

    用python实现,随便输入一个序列(乱序),判断这个序列是否是图序列,如果是,输出图形(有脚标)。

    test8.java

    使用list,最简短的代码,输入一个正数n,输出所有和为n的连续正数序列,结果添加到list中

    在线编程-连续数字求和

    但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? ...

    世界500强面试题.pdf

    1.5.10. 输入一个正数 n,输出所有和为 n 连续正数序列 ................................125 1.6. 面试题集合(五) .......................................................................................126...

    c程序设计习题参考(谭浩强三版)习题参考解答

    11.6编写一个函数new,对n个字符开辟连续的存储空间,此函数应返回一个指针(地址),指向字符串开始的空间。new(n)表示分配n个字节的内存空间。 100 11.7写一函数free,将上题new函数占用的空间释放free(p)表示将p...

    youxiaokai#coding-interviews#57-2.和为S的连续正数序列1

    示例 1:输出:[[2,3,4],[4,5]]示例 2:输出:[[1,2,3,4,5],[4,5,6],[7,8]]限制:方法:双指针法求出两个指针中间数的总和

    MangoDowner#clear-leetcode#剑指Offer57-II.和为s的连续正数序列1

    1、设定左右指针left/right,分别指向1和2,维护左右指针间的窗口和sum 2、如果sum等于target值,将左右指针间的数字作为一个数组加入最终结果

    香浓编码程序

    设某信道有r个输入符号,s个输出符号,信道容量为C,当信道的信息传输率R,码长N足够长时,总可以在输入的集合中(含有r^N个长度为N的码符号序列),找到M ((M^(N(C-a))),a为任意小的正数)个码字,分别代表M个等可能...

    脑力保健 微软,GOOGLE等试题试做 C#版

    每次从这个圆圈中删除第m个数字(第一个为当前数字本身,第二个为当前数字的下一个数字)。 当一个数字删除后,从被删除数字的下一个继续删除第m个数字。 求出在这个圆圈中剩下的最后一个数字。 题目:输入一个...

    目前最火最热门的python经典编程题之3

    57.和为S的连续正数序列 Array 关注 58.翻转单词序列 String 58.左旋转字符串 String 59.滑动窗口的最大值 Queue 常考 60.n个骰子的点数 61.扑克牌顺子 62.孩子们的游戏 Math 63.股票的最大利润 Math 64.求1...

    数据结构(C++)有关练习题

    内容及步骤: 编写一个类Complex,定义复数的加法、减法、乘法和除法运算,要求在编写该类时重载这些运算操作符,并重载I/O操作符,以便输入和输出复数; 实验报告要求: 按要求写出完整的实验代码; ...

    硬件工程师培训教程000006).doc

    一个典 型的操作集包括与内部数据类型相关的基本算术指令(即实数和整数加法、减法、乘法和 除法等)、测试数据项性质(如是否为零,是正数或负数等)的指令 、对数据项的某一部 分进行存取和修改 (如在一个字中存取一...

    hhschool:完成测试任务

    找到一个长度为2N的数字数组的中位数,其中包含两个给定数组中的所有数字。 样本输入:1 2 3 4 1 4 5 6 样本输出:3.5 2.无尽的顺序 让我们以通过粘贴连续的正数形成的无限数字序列为例:S = ...

    硬件工程师培训教程(二).doc

    一个典型的操作集包括 与内部数据类型相关的基本算术指令(即实数和整数加法、减法、乘法和除法等)、测试 数据项性质(如是否为零,是正数或负数等)的指令 、对数据项的某一部分进行存取和修 改 (如在一个字中存取一...

Global site tag (gtag.js) - Google Analytics