C ++中的连续数字和

假设我们有一个正整数N,我们必须找到多少种方法可以将其写为连续的正整数之和?

因此,如果输入像10,那么输出将是3,这是因为我们可以将10表示为5 + 5和7 + 3,所以有两种不同的方式。

为了解决这个问题,我们将遵循以下步骤-

  • ret:= 1

  • 对于初始化i:= 2,(将i增加1),请执行-

    • 从循环中出来

    • 总和:=(i *(i + 1))/ 2

    • 如果总和> N,则-

    • 雷姆:= N-总和

    • ret:= ret +(当rem mod i为0时为1,否则为0)

    • 返回ret

    让我们看下面的实现以更好地理解-

    示例

    #include <bits/stdc++.h>
    using namespace std;
    class Solution {
       public:
       int consecutiveNumbersSum(int N) {
          int ret = 1;
          for(int i = 2; ; i++){
             int sum = (i * (i + 1)) / 2;
             if(sum > N) break;
             int rem = N - sum; ret += (rem % i == 0);
          }
          return ret;
       }
    }; main(){
       Solution ob;cout << (ob.consecutiveNumbersSum(10));
    }

    输入项

    10

    输出结果

    2