用 C++ 计算将数字分成几部分的方法数


给定一个正数 N,目标是计算将数字 N 分成 3 部分的方法数。这些部分可以相等,也可以不相等。N 的范围在 [1, 5000] 之间。

我们将使用三个 for 循环来表示数字的 3 个部分。在最内层循环中检查三个数的总和是否等于 N。如果相等,则递增方法计数。

让我们通过例子来理解。

输入 − N=5

输出 − 将 N 分成 3 部分的方法数:2

解释 − 5 可以表示为 (1,1,3) 和 (1,2,2) 的和。

输入 − N=9

输出 − 将 N 分成 3 部分的方法数:7

解释 − 9 可以表示为以下和:(1, 1, 7), (1, 2, 6), (1, 3, 5), (1, 4, 4), (2, 2, 5), (2, 3, 4) 和 (3, 3, 3)。

下面程序中使用的方法如下

  • 我们取一个整数 N,其初始值在 1 到 5000 之间。

  • 函数 divideN(int n) 接收 n 并返回将 n 分成 3 部分的方法数。

  • 将初始变量 count 设置为 0,表示方法数。

  • 使用三个 for 循环遍历数字的每一部分。

  • 最外层循环从 1<=i

  • 检查 i、j 和 k 的和是否等于 n。如果相等,则递增 count。

  • 所有循环结束后,count 将包含将 n 分成三个部分的总方法数。

  • 返回 count 作为结果。

示例

 在线演示

#include <bits/stdc++.h>
using namespace std;
int divideN(int n){
   int count = 0;
   for (int i = 1; i < n; i++){
      for (int j = i ; j < n; j++){
         for (int k = j; k < n; k++){
            int sum=i+j+k;
            if(sum==n)
               { count++; }
         }
      }
   }
   return count;
}
int main(){
   int N=500;
   cout <<endl<< "Number of ways to divide N in 3 parts : "<<divideN(N);
   return 0;
}

输出

如果运行以上代码,将生成以下输出:

Number of ways to divide N in 3 parts: 20833

更新于:2020-10-31

363 次浏览

开启您的 职业生涯

完成课程后获得认证

开始学习
广告