连续的正数序列,使得和为指定值
2012-09-17 10:59
141 查看
题目:
连续的正数序列,使得和为指定值
分析:
以前做过类似的题目,求解两个数字和为指定值这种题目,采用先排序,然后从两头开始查找的方式,这题其实也差不多,采用两个指针,不过这次两个指针同时从头开始查找,初始化时first指针指向1,second指针指向2,如果curr_sum小于指定的sum,second指针往后移东;相反,如果curr_sum大于指定的sum,first指针往后移动。
代码如下:
总结:
学会用指针,尤其多个指针,可以解决很多有意思的问题。
连续的正数序列,使得和为指定值
分析:
以前做过类似的题目,求解两个数字和为指定值这种题目,采用先排序,然后从两头开始查找的方式,这题其实也差不多,采用两个指针,不过这次两个指针同时从头开始查找,初始化时first指针指向1,second指针指向2,如果curr_sum小于指定的sum,second指针往后移东;相反,如果curr_sum大于指定的sum,first指针往后移动。
代码如下:
#include <iostream> #include <cstdlib> #include <cstdio> using namespace std; //输出序列 void printSequence(int small, int big) { if(small > big) return ; for(int i = small; i <= big; i++) cout << i << " "; cout << endl; return ; } int main() { int sum = 10001; int small = 1; int big = 2; int middle = (1 + sum) / 2; int curr_sum = small + big; while(small < middle) { if(curr_sum == sum) printSequence(small, big); else { while(curr_sum > sum && small < middle) //一直循环,知道当前的和比sum小 { curr_sum = curr_sum - small; small++; if(curr_sum == sum) printSequence(small, big); } } big++; curr_sum += big; } return 0; }
总结:
学会用指针,尤其多个指针,可以解决很多有意思的问题。
相关文章推荐
- 面试题40:输出和为指定值的连续正数序列
- 小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!
- 面试题41:和为s的两个数字,和为s的连续正数序列
- 输入n个元素组成的序列S,你需要找出一个乘积最大的连续子序列。如果这个最大的乘积不是正数,应输出0(表示无解)。1<=18,-10<=Si<=10
- 和为S的连续正数序列
- 剑指offer-和为S的连续正数序列
- 面试题41:和为s的两个数字VS和为s的连续正数序列
- 面试题41—相关题目(和为s的所有连续正数序列)
- 递增数列中和为s的两个数字,和为s的连续正数序列
- 剑指offer:和为S的连续正数序列
- 【41】和为S的连续正数序列
- 和为S的连续正数序列
- 【剑指Offer】面试题41:和为s的连续正数序列
- 输入一个正数s,打印出所有和为s的连续正数序列
- 和为S的连续正数序列
- 【题目35】和为n连续正数序列
- YTUOJ-和为n连续正数序列(栈和队列)
- 剑指offer(44):和为s的连续正数序列
- 和为n连续正数序列
- 剑指offer:和为S的连续正数序列