在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