剑指Offer——输入正整数S,打印出所有和为S的连续正数序列(至少含有两个正数)
来源:互联网 发布:大中华软件 编辑:程序博客网 时间:2024/04/30 02:48
主要思路:
定义两个数从1,2开始增长,求这两个数之间所有数的和,如果等于S则打印输出,如果大于则让小的数增长,否则让大的数增长,增长后重现判断和是否等于S,在循环中执行直到小的数大于等于(1+S)/2。用到了一个小小的技巧,就是求两个数中间的数之和时,保存了上一次的值,新的值只需要减去小的数,或者加上大的数即可。
以下代码在VS2015中调试通过:
#include "stdafx.h"#include<iostream>using namespace std;void PrintContinuousSequence(int small, int big){printf("the nums is:\n");for (int j = small; j <= big; ++j){printf("%d", j);}printf("\n");}bool FindContinuousSequence(int sum){if (sum<3)return false;int small = 1;int big = 2;int middle = (1 + sum)/2;int curSum = small + big;while (small < middle){if (curSum == sum)PrintContinuousSequence(small, big);while (curSum > sum && small < middle){curSum -= small;small++;if(curSum == sum)PrintContinuousSequence(small, big);}big++;curSum += big;}return true;}int main(){int sum = 0;cin >> sum;if (!(FindContinuousSequence(sum)))printf("can't find!");while (1);return 0;}
0 0
- 剑指Offer——输入正整数S,打印出所有和为S的连续正数序列(至少含有两个正数)
- 输入一个正数s,打印出所有和为s的连续正数序列(至少包含两个数)
- 输入一个正数s,打印出所有和为s的连续正数序列(至少包含两个数),例如输入15,打印出连续3个序列1-5,4-6,7-8
- 输入一个正数s,打印出所有和为s的连续正数序列
- 面试题41_2 输入一个正数s,打印所有和为s的连续正数序列(至少两个数)
- 剑指offer—和为S的连续正数序列
- 剑指offer—和为s的连续正数序列
- 剑指offer — 和为S的连续正数序列
- 剑指off-输入s打印所有和为s的连续正数序列
- 打印所有和为s的连续正数序列
- Q411:打印所有和为s的连续正数序列
- 剑指offer——和为s的两个数字VS和为s的连续正数序列
- 剑指offer 面试题41—和为s的两个数字VS和为s的连续正数序列
- 打印所有和为s的连续正整数序列(至少含两个数)
- 剑指offer---和为s的两个数字VS和为s的连续正数序列
- 剑指Offer:和为 S 的两个数字 VS 和为 S 的连续正数序列
- 剑指offer-和为s的两个数字VS和为s的连续正数序列
- 剑指offer 41 - 和为s的两个数字VS为s的连续正数序列
- iOS绘图 - 自定义柱状图绘制
- Java写入文件实现换行(简洁、稳定、亲测可行)
- hibernate 1对1外键关联映射
- javascript 之prototype详解
- 利用photoshopcs6将gif格式图片变为背景透明
- 剑指Offer——输入正整数S,打印出所有和为S的连续正数序列(至少含有两个正数)
- Android ActionBar详解
- S3C6410 之裸机程序烧写
- spring中事务传播下,特殊方法手动控制事务
- LeetCode 251. Flatten 2D Vector(摊平二维向量)
- 5.6.8 执行指令处理回调函数
- java面试重点
- 判断二叉树是否为平衡二叉树
- 选择排序