配列がC++で等しい合計の2つのサブ配列に分割できるかどうかを調べます
配列Aがあるとします。配列を、合計が等しい2つの部分に分割できるかどうかを確認する必要があります。要素が[6、1、3、2、5]であるとすると、[6、1]、および[2、5]は2つのサブ配列になります。
この問題は、これらのルールに従うことで簡単に解決できます。最初に配列のすべての要素の合計を見つける必要があります。次に、配列の各要素について、total_sum(これまでに見つかった要素の合計)を使用して正しい合計を計算できます。
例
#include<iostream> #include<numeric> using namespace std; void displaySubArray(int arr[], int left, int right) { cout << "[ "; for (int i = left; i <= right; i++) cout << arr[i] << " "; cout << "] "; } void subarrayOfSameSum(int arr[] , int n) { int total_sum = accumulate(arr, arr+n, 0); int so_far_sum = 0; for(int i = 0; i<n; i++){ if(2*so_far_sum+arr[i] == total_sum){ cout << "subarray 1: "; displaySubArray(arr, 0, i-1); cout << "\nsubarray 2: "; displaySubArray(arr, i+1, n-1); return; } so_far_sum += arr[i]; } cout << "No subarray can be formed"; } int main() { int arr[] = {6, 1, 3, 2, 5} ; int n = sizeof(arr)/sizeof(arr[0]); subarrayOfSameSum(arr, n); }
出力
subarray 1: [ 6 1 ] subarray 2: [ 2 5 ]
-
C ++の合計配列パズル?
ここでは、配列に関連する1つの興味深い問題を確認します。 n個の要素を持つ配列があります。 n個の要素の別の配列を作成する必要があります。ただし、2番目の配列のi番目の位置は、i番目の要素を除く最初の配列のすべての要素の合計を保持します。そして、1つの制約は、この問題では減算演算子を使用できないことです。 減算演算を使用できれば、すべての要素の合計を取得し、最初の配列のi番目の要素を減算して、2番目の配列のi番目の場所に格納することで、この問題を簡単に解決できます。 ここでは、毎回要素を追加することでこれを解決し、0..n-1のiについては、位置iの要素を無視します。ポイントを得るためのア
-
Pythonで配列を等しい合計のサブ配列に分割できる合計を見つけます
整数Aの配列があるとします。値sum[i]の場合、配列をsum sum [i]のサブ配列に分割できるように、sumのすべての値を見つける必要があります。配列を等しい合計のサブ配列に分割できない場合は、-1を返します。 したがって、入力がA =[2、4、2、2、2、4、2、6]のような場合、配列は次のサブ配列に分割できるため、出力は[6,8,12]になります。合計6、8、および12。これらは次のとおりです。[{2、4}、{2、2、2}、{4、2}、{6}] [{2、4、2}、{2、2 、4}、{2、6}] [{2、4、2、2、2}、{4、2、6 これを解決するには、次の手順に従います-