C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

3つの連続する要素ごとに1つがC++で取得されるような最小の合計を見つけます


n個の要素の配列があるとします。タスクは、配列から要素の最小合計を見つけることです。その配列内の3つの連続する要素ごとに少なくとも1つの要素1つの要素が選択されるようにします。したがって、配列が[1、2、3、6、7、1]のような場合。出力は4です。したがって、3と1を選択すると、(3 + 1 =4)になります。したがって、[1、2、3]、[2、3、6]、[3、6、7]、[6、7、1]のような連続する要素のサブ配列がいくつかあり、すべてのサブ配列から1つの要素を選択しました。

sum(i)が可能な最小の合計を返すことを考慮してください。ここで、arr [i]は解の一部であり、最後に選択された要素です。次に、結果はsum(i – 1)、sum(i – 2)、sum(i – 3)の最小値になります。これには重複するサブ問題があることがわかるので、動的計画法を使用してこれを解決できます。

#include <iostream>
using namespace std;
int minOfThree(int a, int b, int c) {
   return min(min(a, b), c);
}
int getMinSum(int arr[], int n) {
   int sum[n];
   sum[0] = arr[0];
   sum[1] = arr[1];
   sum[2] = arr[2];
   for (int i=3; i<n; i++)
   sum[i] = arr[i] + minOfThree(sum[i-3], sum[i-2], sum[i-1]);
   return minOfThree(sum[n-1], sum[n-2], sum[n-3]);
}
int main() {
   int arr[] = {1, 2, 3, 20, 2, 10, 1};
   int n = sizeof(arr)/sizeof(arr[0]);
   cout << "Minimum sum is: " << getMinSum(arr, n);
}

出力

Minimum sum is: 4

  1. C++で2つの要素が隣接しないような循環配列の最大合計

    この問題では、循環配列cirArr[]が与えられます。私たちのタスクは、C++で2つの要素が隣接しないように循環配列の最大合計を見つけるプログラムを作成することです。 問題の説明 循環配列の場合、隣接する要素を取得できないように、配列の要素の最大合計を見つける必要があります。つまり、代替要素を取得する必要があります。 循環アレイ は、配列の最後の要素が最初の要素に接続されている特殊なタイプの配列です。 問題を理解するために例を見てみましょう 入力 cirArr[] = {4, 1, 5, 3, 2} 出力 9 説明 最大合計循環サブシーケンスは[4、5、2]です。合計=9 ソリ

  2. xとその桁の合計がC++で指定されたnと等しくなるような数xを見つけます

    ここで、1つの問題が発生します。ここで、数値nを取得する場合、x +桁の合計xが指定された数値nと同じになるように、xなどの別の値を見つける必要があります。 nの値が21であると仮定します。このプログラムは、15+桁の合計15、つまり15 + 1 + 5 =21=nとして数値x=15を返します。 この問題を解決するには、単純なアプローチに従う必要があります。 1からnまで繰り返し、各繰り返しで、数値とその桁の合計の合計が数値と同じであるかどうかを確認し、停止します。それ以外の場合は続行します。 例 #include<iostream> using namespace std; i