zoukankan      html  css  js  c++  java
  • 41和为S的连续正数序列+注意循环条件记一下这题特殊解法

    题目描述
    小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,
    他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22
    现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck! 输出描述: 输出所有和为S的连续正数序列。序列内按照从小至大的顺序,序列间按照开始数字从小到大的顺序

    思路:借鉴一下前面那题的思路,使用两个变量small和big,分别初始化为1,2,因为是连续几个数的和,如果tmp>um,需要循环的减去small,小于的时候加上比较大的big,数组要放在循环里面定义,这样不需要增加清空的代码。循环条件是small增加到(1+s)/2为止。不能是等于,只能小于,因为等于的时候会big= small,比如s=3的时候。

    class Solution {
    public:
        vector<int> pushres(int small,int big){
            
            vector<int> tmp;        
            for(int i = small;i <= big;++i){
                tmp.push_back(i);
            }
            return tmp;
        }
        vector<vector<int> > FindContinuousSequence(int sum) {
            vector<vector<int> > result;        
            int flag = 0;
            if(sum <= 2){
                return result;
            }
            int small = 1,big = 2;
            flag = small + big;
            int end = (1 + sum) / 2;
            while(small < end){//不需要判断small < big,这种情况因为small==big的情况才有可能等于sum,small<end,不可能出现这种情况
               vector<int> tmp;//不需要每次都清空tmp
                if((flag == sum)){                
                    tmp = pushres(small,big);
                    result.push_back(tmp);
                }
                while((small < end) && (flag > sum)){
                    flag -= small;
                    ++small;
                    if((flag == sum) ){                
                    tmp = pushres(small,big);
                    result.push_back(tmp);
                }
                    
                }
                ++big;
                flag += big;
            }
            return result;
        }
    };
  • 相关阅读:
    wait waitpid
    达梦备份还原
    sigprocmask阻塞信号
    sigaction信号处理
    dd命令
    linux系统启动过程
    cpio建立、还原备份档
    configure详解
    Git入门基础教程
    一篇文章了解Github和Git教程
  • 原文地址:https://www.cnblogs.com/dingxiaoqiang/p/8202772.html
Copyright © 2011-2022 走看看