题目:输入一个正数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);
分享到:
相关推荐
# 输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。 # 序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。 # 输入示例 # 输入:target = 9 # 输出:[[2,3,4],[4,5]...
57.2 和为 S 的连续正数序列题目描述牛客网题目描述输出所有和为 S 的连续正数序列。例如和为 100 的连续序列有:[9, 10, 11, 12, 13,
和为S的连续正数序列.md
输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。 序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。 示例 1: 输入:target = 9 输出:[[2,3,4],[4,5]] 示例 2: ...
面试题57 - II. 和为s的连续正数序列输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。示例 1:输出:[
示例 1:输出:[[2,3,4],[4,5]]示例 2:输出:[[1,2,3,4,5],[4,5,6],[7,8]]当窗口的和小于 target 的时候,窗口的
用python实现,随便输入一个序列(乱序),判断这个序列是否是图序列,如果是,输出图形(有脚标)。
使用list,最简短的代码,输入一个正数n,输出所有和为n的连续正数序列,结果添加到list中
但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? ...
1.5.10. 输入一个正数 n,输出所有和为 n 连续正数序列 ................................125 1.6. 面试题集合(五) .......................................................................................126...
11.6编写一个函数new,对n个字符开辟连续的存储空间,此函数应返回一个指针(地址),指向字符串开始的空间。new(n)表示分配n个字节的内存空间。 100 11.7写一函数free,将上题new函数占用的空间释放free(p)表示将p...
示例 1:输出:[[2,3,4],[4,5]]示例 2:输出:[[1,2,3,4,5],[4,5,6],[7,8]]限制:方法:双指针法求出两个指针中间数的总和
1、设定左右指针left/right,分别指向1和2,维护左右指针间的窗口和sum 2、如果sum等于target值,将左右指针间的数字作为一个数组加入最终结果
设某信道有r个输入符号,s个输出符号,信道容量为C,当信道的信息传输率R,码长N足够长时,总可以在输入的集合中(含有r^N个长度为N的码符号序列),找到M ((M^(N(C-a))),a为任意小的正数)个码字,分别代表M个等可能...
每次从这个圆圈中删除第m个数字(第一个为当前数字本身,第二个为当前数字的下一个数字)。 当一个数字删除后,从被删除数字的下一个继续删除第m个数字。 求出在这个圆圈中剩下的最后一个数字。 题目:输入一个...
57.和为S的连续正数序列 Array 关注 58.翻转单词序列 String 58.左旋转字符串 String 59.滑动窗口的最大值 Queue 常考 60.n个骰子的点数 61.扑克牌顺子 62.孩子们的游戏 Math 63.股票的最大利润 Math 64.求1...
内容及步骤: 编写一个类Complex,定义复数的加法、减法、乘法和除法运算,要求在编写该类时重载这些运算操作符,并重载I/O操作符,以便输入和输出复数; 实验报告要求: 按要求写出完整的实验代码; ...
一个典 型的操作集包括与内部数据类型相关的基本算术指令(即实数和整数加法、减法、乘法和 除法等)、测试数据项性质(如是否为零,是正数或负数等)的指令 、对数据项的某一部 分进行存取和修改 (如在一个字中存取一...
找到一个长度为2N的数字数组的中位数,其中包含两个给定数组中的所有数字。 样本输入:1 2 3 4 1 4 5 6 样本输出:3.5 2.无尽的顺序 让我们以通过粘贴连续的正数形成的无限数字序列为例:S = ...
一个典型的操作集包括 与内部数据类型相关的基本算术指令(即实数和整数加法、减法、乘法和除法等)、测试 数据项性质(如是否为零,是正数或负数等)的指令 、对数据项的某一部分进行存取和修 改 (如在一个字中存取一...