• 每日编程-20170308-2


    题目:给出两个自然数N和n,找到一组连续的自然数,其长度大于等于n,其和等于N。

    输入:N(空格)n

    输出:自然数列,每个数之间有空格,最后一个数后无空格 | 没有答案则输出:No answer

    解答:

     1 #include <iostream>
     2 #include <vector>
     3 using std::cout; using std::endl; using std::cin;
     4 using std::vector;
     5 
     6 int main() {
     7 
     8     int N, n, sum = 0;  //sum为总和
     9     vector<int> answer;  //答案以vector形式保存,因为不确定会有多少
    10     cin >> N >> n;  //输入参数
    11     for (auto i = 1; i <= N/2; i++)  //遍历1到N/2,考虑到(N/2)+(N/2)+1 > N
    12     {
    13         for (auto j = i; sum < N ; j++)  //从i开始遍历,直到数列和不小于N
    14         {
    15             sum += j;
    16             answer.push_back(j);
    17         }
    18         if (sum == N && ((answer.end() - answer.begin()) > n))  //如果sum等于N,并且answer长度大于n
    19         {
    20             for (auto beg = answer.begin(); beg != answer.end();beg++)  //输出answer
    21             {
    22                 cout << *beg;
    23                 if (beg+1 != answer.end())
    24                 {
    25                     cout << " ";
    26                 }
    27             }
    28             break;
    29         }
    30         else  //如果sum不等于N或者answer长度小于等于n
    31         {
    32             answer = {};  //清空答案,sum清零
    33             sum = 0;
    34         }
    35     }
    36     if (answer.begin() == answer.end())  //如果answer为空,没有答案
    37     {
    38         cout << "No answer" << endl;
    39     }
    40 }

     第二版

     1 #include <iostream>
     2 #include <vector>
     3 using std::cout; using std::endl; using std::cin;
     4 using std::vector;
     5 
     6 int main() {
     7 
     8     int N, n, sum = 0;
     9     vector<int> answer;
    10     cin >> N >> n;
    11     for (auto i = 1; i <= N/n; i++)  //数学改进,n(N/n) + n-1 > n
    12     {
    13         for (auto j = i; sum < N ; j++)
    14         {
    15             sum += j;
    16             answer.push_back(j);
    17         }
    18         if (sum == N && (answer.size() > n))   //刚才脑残了,把size忘了
    19         {
    20             for (auto beg = answer.begin(); beg != answer.end();beg++)
    21             {
    22                 cout << *beg;
    23                 if (beg+1 != answer.end())
    24                 {
    25                     cout << " ";
    26                 }
    27             }
    28             break;
    29         }
    30         else
    31         {
    32             answer = {};
    33             sum = 0;
    34         }
    35     }
    36     if (answer.begin() == answer.end())
    37     {
    38         cout << "No answer" << endl;
    39     }
    40 }
  • 相关阅读:
    树的一些操作
    线程池的概念
    线程池
    BLOB字段来保存fastreport的报表模板
    D7调用XE2 中间层注意事项
    xe2 datasnap中间层+d7客户端调用
    关于延迟时间的一点智慧

    插件
    phpstorm clone 码云项目到本地 Version Control 不显示
  • 原文地址:https://www.cnblogs.com/linhaowei0389/p/6522895.html
Copyright © 2020-2023  润新知