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

C言語で前の要素による除算後の配列の合計を求める方法

配列とは、同じデータ型の要素が順番に並んだデータ構造です。この記事では、整数型の配列を扱い、「各要素をその直前の要素で除算した商の合計」を求める方法を解説します。

まず、具体例を見ながら問題の内容を理解しましょう。

例1

配列 : 3 , 5 , 98, 345
合計 : 26

解説 − 3 + 5/3 + 98/5 + 345/98 = 3 + 1 + 19 + 3 = 26

各要素をその直前の要素で除算し、商の整数部分のみを使用して合計を求めています。

例2

配列 : 2, 5 , 8, 11, 43 , 78 , 234
合計 : 13

解説 − 2 + 2 + 1 + 1 + 3 + 1 + 3 = 13

アルゴリズム

このアルゴリズムでは、配列の各要素を先頭から順に走査し、その要素を直前の要素で除算します。そして、得られた商を合計用の変数(sum)に加算していきます。

入力 : 配列 - int arr[]
出力 : int sum
Step 1: sum を arr[0] で初期化する
Step 2: i = 1 から配列のサイズまで、Step 3 を繰り返す
Step 3: sum = sum + (arr[i] / arr[i-1])
Step 4: sum を出力する

これは「前の数値で除算した後の配列の合計」を求めるための、わずか4ステップのシンプルなアルゴリズムです。合計を配列の最初の要素で初期化しているのは、最初の要素にはそれより前に要素が存在せず、どの要素でも除算できないためです。仮に for ループを i = 0 から開始すると、存在しないインデックス -1 の要素にアクセスすることになり、プログラムが誤動作する恐れがあります。

実装例

#include<stdio.h>
int main() {
   int arr[] = { 2, 5 , 8, 11, 43 , 78 , 234 };
   int n = sizeof(arr)/sizeof(arr[0]);
   int sum = arr[0];
   for (int i = 1; i < n; i++) {
      sum += arr[i] / arr[i - 1];
   }
   printf("前の数値で除算した後の配列の合計は %d です \n", sum);
   return 0;
}

出力

前の数値で除算した後の配列の合計は 13 です。
  1. PythonでK回の符号反転後に配列の合計を最大化する

    問題概要 整数の配列 A が与えられます。この配列に対して、次の操作をちょうど K 回行うことを考えます。 任意のインデックス i を選び、A[i] を -A[i] に置き換える(符号を反転する) すべての操作を行ったあとの配列の合計として、考えられる最大値を求めるのがこの問題です。 例: A = [4, 2, 3]、K = 1 の場合、出力は 5 になります。インデックス 1 を選んで反転すると配列は [4, -2, 3] となり、合計は 4 + (-2) + 3 = 5 となるからです。 解法の考え方(貪欲法) この問題は貪欲法で解くのが有効です。基本となる発想は次の通りです。 負

  2. Pythonでクエリ処理後の偶数の合計を効率的に求める方法

    整数の配列 A と、クエリを格納した配列 queries があるとします。i番目のクエリでは、value = queries[i][0]、index = queries[i][1] となり、A[index] に value を加算します。そして、i番目のクエリに対する答えは、更新後の配列 A に含まれる偶数の合計値です。すべてのクエリに対する答えを順番に求め、それらを配列として返すのがこの問題の目的です。問題の例例として、配列が [1,2,3,4]、クエリ配列が [[1,0],[-3,1],[-4,0],[2,3]] の場合を考えてみましょう。このとき、答えの配列は [8,6,2,4] になり