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

C言語で配列から合計三角形(Sum Triangle)を作成する方法


合計三角形とは

配列から作る合計三角形(Sum Triangle)とは、配列の要素数を1つずつ減らしながら、隣り合う要素同士の和からなる新しい配列を順に積み上げて形成される三角形のことです。この処理は、配列に要素が1つだけ残るまで繰り返されます。

具体例で理解する

まず、次の例を見てみましょう。

Array = [3,5,7,8,9]

出力

[106]
[47,59]
[20,27,32]
[8,12,15,17]
[3,5,7,8,9]

計算過程の解説

第1段階:(3 + 5 = 8)、(5 + 7 = 12)、(7 + 8 = 15)、(8 + 9 = 17)
第2段階:8 + 12 = 20、12 + 15 = 27、15 + 17 = 32
第3段階:20 + 27 = 47、27 + 32 = 59
最終段階:47 + 59 = 106

このように、各段階で隣接する2つの要素を足し合わせた新しい配列を作り、それを下から順に積み上げていくことで三角形が完成します。

C言語での実装

上記の流れをプログラムで実現するには、各段階の配列に対して自分自身を呼び出す再帰関数を使用します。再帰呼び出しによって最上位(要素が1つだけの状態)まで計算を進め、戻りながら各段階の配列を出力することで、三角形全体を表示できます。

#include<stdio.h>
void printTriangle(int arr[] , int n) {
    if (n < 1) {
        return;
    }
    int temp[n - 1];
    for (int i = 0; i < n - 1; i++) {
        int x = arr[i] + arr[i + 1];
        temp[i] = x;
    }
    printTriangle(temp, n - 1);
    for (int i = 0; i < n ; i++) {
        if(i == n - 1)
            printf("%d ",arr[i]);
        else
            printf("%d, ",arr[i]);
    }
    printf("\n");
}
int main() {
    int arr[] = { 3,5,7,8,9};
    int n = sizeof(arr) / sizeof(arr[0]);
    printTriangle(arr, n);
}

出力結果

106
47, 59
20, 27, 32
8, 12, 15, 17
3, 5, 7, 8, 9

コードのポイント

  • 再帰の終了条件: 要素数 n が1未満になった時点で再帰を終了します。
  • 隣接要素の和の計算: ループ内で arr[i] + arr[i+1] を計算し、新しい配列 temp を生成します。
  • 出力のタイミング: 再帰呼び出しのに配列を表示しているため、頂点(最終的な合計値)から底辺(元の配列)へと順に出力されます。

なお、このアルゴリズムの時間計算量は O(n²) です。各段階で隣接要素の和を計算するため、要素数が1つ減るごとに計算回数も減少していきます。再帰の考え方と配列操作を同時に学べる、良い練習問題と言えるでしょう。

  1. 【初心者向け】JavaScriptのArray.from()メソッドの使い方を実例で解説

    JavaScript の Array.from() メソッドは、length プロパティを持つオブジェクト(配列風オブジェクト)や、文字列・Map・Set などの反復可能(イテラブル)なオブジェクトから、新しい Array オブジェクトを生成して返すためのメソッドです。元のオブジェクトは変更されず、常に新しい配列インスタンスが返されます。 基本構文 Array.from(obj, mapFunction, val) パラメータの説明 obj:配列へ変換したい対象のオブジェクト。配列風オブジェクト(length プロパティを持つもの)や反復可能なオブジェクトを指定します。 mapFunctio

  2. JavaScriptのArray.from()メソッドとは?使い方と実例をわかりやすく解説

    Array.from()メソッドは、配列風オブジェクト(array-like)や反復可能オブジェクト(iterable)から、新しい配列オブジェクトを作成するための便利なメソッドです。文字列、Map、Set、NodeListなど、さまざまなデータを手軽に配列へ変換できます。 Array.from()の基本的な動作 例えば、文字列「HelloWorld」に対してArray.from()を使用すると、1文字ずつ分割された新しい配列が生成されます。以下に実際のコード例を示します。 サンプルコード <!DOCTYPE html> <html lang="ja"&g