• JZ-C-41-Plus


    剑指offer第四十一题-拓展:和为s的连续正数序列:输入一个正数s,打印出所有和为s的连续正数序列(至少含有两个数)

     1 //============================================================================
     2 // Name        : JZ-C-41-Plus.cpp
     3 // Author      : Laughing_Lz
     4 // Version     :
     5 // Copyright   : All Right Reserved
     6 // Description : 和为s的连续正数序列:输入一个正数s,打印出所有和为s的连续正数序列(至少含有两个数)
     7 //============================================================================
     8 
     9 #include <iostream>
    10 #include <stdio.h>
    11 using namespace std;
    12 
    13 void PrintContinuousSequence(int small, int big);
    14 
    15 void FindContinuousSequence(int sum) {
    16     if (sum < 3)
    17         return;
    18 
    19     int small = 1;
    20     int big = 2;
    21     int middle = (1 + sum) / 2;
    22     int curSum = small + big; //这里curSum其实是从small到big之间所有数字的累加和
    23 
    24     while (small < middle) {
    25         if (curSum == sum)
    26             PrintContinuousSequence(small, big);
    27 
    28         while (curSum > sum && small < middle) {
    29             curSum -= small; //每次更新curSum值
    30             small++;
    31 
    32             if (curSum == sum)
    33                 PrintContinuousSequence(small, big);
    34         }
    35 //        while (curSum <= sum && small < middle) { //自己写的还是不如源码啊。。清晰却不简洁
    36 //            big++;
    37 //            curSum += big;
    38 //            if (curSum >= sum)
    39 //                break;
    40 //        }
    41         big++;
    42         curSum += big; //每次更新curSum值
    43     }
    44 }
    45 
    46 void PrintContinuousSequence(int small, int big) {
    47     for (int i = small; i <= big; ++i)
    48         printf("%d ", i);
    49 
    50     printf("
    ");
    51 }
    52 
    53 // ====================测试代码====================
    54 void Test(char* testName, int sum) {
    55     if (testName != NULL)
    56         printf("%s for %d begins: 
    ", testName, sum);
    57 
    58     FindContinuousSequence(sum);
    59 }
    60 
    61 int main(int argc, char** argv) {
    62     Test("test1", 1);
    63     Test("test2", 3);
    64     Test("test3", 4);
    65     Test("test4", 9);
    66     Test("test5", 15);
    67     Test("test6", 100);
    68 
    69     return 0;
    70 }
  • 相关阅读:
    【线性代数的几何意义】行列式的几何意义
    中国古代亲属称谓家谱总览
    百分比,千分比,万分比,百分比或百分吕,千分率等
    中国市场区域划分
    中国血统关系称谓大全
    中国人不可不了解的常知识
    中国有多少个省,多少个直辖市,多少个特别行政区,多少个自治区
    电影格式的区别
    十二星座对应的月份
    企业,公司职位名称大全(中英文对照)
  • 原文地址:https://www.cnblogs.com/Laughing-Lz/p/5615247.html
Copyright © 2020-2023  润新知