用 C++ 表示 N 为 1、3 和 4 的和的不同方法的计数


给定一个正数 N 作为输入。目标是找到我们可以用仅 1、3 和 4 的和来表示 N 的方法的数量。例如,如果 N 是 4,则它可以表示为 1+1+1+1、3+1、1+3、4,因此方法的数量为 4。

让我们通过例子来理解。

例如

输入 -  N=5

输出 - 用 1、3 和 4 的和表示 N 的不同方法的计数为:6

说明 - 5 可以表示为

  • 1+1+1+1+1
  • 1+3+1
  • 3+1+1
  • 1+1+3
  • 4+1
  • 1+4

输入 - N=6

输出 - 用 1、3 和 4 的和表示 N 的不同方法的计数为:9

说明 - 9 可以表示为

  • 1+1+1+1+1+1
  • 3+1+1+1
  • 1+3+1+1
  • 1+1+3+1
  • 1+1+1+3
  • 3+3
  • 4+1+1
  • 1+4+1
  • 1+1+4

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

在这种方法中,我们将使用动态规划方法来计算我们可以用 1、3 和 4 的和来表示 N 的方法的数量。取数组 arr[i],其中 i 表示数字,arr[i] 表示将其表示为和的方法。

 基本情况将是 

arr[0]=0(无方法)

arr[1]=1(只有一种方法,1)

arr[2]=1(只有一种方法,1+1)

arr[3]=2(1+1+1,3)

现在其他数字 4、5 … i 等将具有以下方法:arr[i-1]+arr[i-3]+arr[i-4]。

  • 将一个正数 N 作为输入。
  • 函数 Expres_sum(int N) 获取 N 并返回用 1、3 和 4 的和表示 N 的不同方法的数量。
  • 取数组 arr[N+1] 来存储方法的数量。
  • 初始化基本情况 arr[0] = 1、arr[1] = 1、arr[2] = 1 和 arr[3] = 2。
  • 遍历从 i=4 到 i<=N 的其余值。
  • 将 arr[i] 作为 arr[i - 1] + arr[i - 3] + arr[i - 4] 的和。
  • 在 for 循环结束时,返回 arr[N] 作为结果。

示例

在线演示

#include <bits/stdc++.h>
using namespace std;
int Expres_sum(int N) {
   int arr[N + 1];
   arr[0] = 1;
   arr[1] = 1;
   arr[2] = 1;
   arr[3] = 2;
   for (int i = 4; i <= N; i++) {
      arr[i] = arr[i - 1] + arr[i - 3] + arr[i - 4];
   }
   return arr[N];
}
int main() {
   int N = 5;
   cout << "Count of different ways to express N as the sum of 1, 3 and 4 are: " << Expres_sum(N);
   return 0;
}

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

输出

Count of different ways to express N as the sum of 1, 3 and 4 are: 6

更新于: 2021年1月29日

699 次浏览

开启你的 职业生涯

完成课程获得认证

开始学习
广告
© . All rights reserved.