用 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
广告