C++程序中选择除法或原值计算的最大值


在这个问题中,我们给定一个数字N。我们的任务是创建一个程序,在C++中选择除法或原值计算来找到最大值。

问题描述

为了找到最大值,我们可以考虑任意两个值,要么取其原值,要么通过除法得到最大值。该值可以提取为 **F(N/2) + F(N/3) + F(N/4) + F(N/5)**。

让我们举个例子来理解这个问题:

**输入**: N = 8

输出:9

解释

F(8) = F(8/2) + F(8/3) + F(8/4) + F(8/5) = F(4) + F(2) + F(2) + F(1) = 4 + 2 + 2 + 1 = 9

解决方案

其思想是简单地多次调用相同函数来计算除法的结果。为此,我们使用了动态规划的概念,并创建了一个数组来解决从0到N的F(i)值,以便在寻找解决方案时重复使用它们。

示例

 在线演示

#include <iostream>
using namespace std;
int calcMaximumValue(int N) {
   int F[N + 1];
   int divVal = 0;
   F[0] = 0;
   F[1] = 1;
   for (int i = 2; i <= N; i++) {
      divVal = ( F[i / 2] + F[i / 3] + F[i / 4] + F[i / 5] );
      if(divVal > i)
         F[i] = divVal;
      else
         F[i] = i;
   }
   return F[N];
}
int main() {
   int N = 8;
   cout<<"Maximum value with the choice of either dividing or considering as it is = "<<calcMaximumValue(N);
   return 0;
}

输出

Maximum value with the choice of either dividing or considering as it is = 9

更新于: 2020年10月9日

172 次浏览

开启您的职业生涯

完成课程获得认证

开始学习
广告