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

【C言語】奇数次正方行列の中央の行と列の積を求める方法

はじめに

正方行列 mat[row][column](行数と列数が等しい行列)を考えます。このとき、行と列の長さが奇数、つまり 2 で割り切れない値である場合、その行列の中央の行中央の列に含まれる各要素の積を求めるのが本記事の目的です。

たとえば下図のような 3×3 の行列では、2 行目が中央の行、2 列目が中央の列に相当します。

【C言語】奇数次正方行列の中央の行と列の積を求める方法

制約条件

  • 入力は必ず正方行列(行数 = 列数)であること。
  • 行と列の長さは必ず奇数であること。

入出力例

例 1

入力:

mat[][] = {{1, 2, 3},
{4, 5, 6},
{7, 8, 9}}

出力:

中央の行の積 = 120
中央の列の積 = 80

説明:

中央の行の積 = 4 × 5 × 6 = 120
中央の列の積 = 2 × 5 × 8 = 80

例 2

入力:

mat[][] = {{3, 5, 0},
{1, 2, 7},
{9, 0, 5}}

出力:

中央の行の積 = 14
中央の列の積 = 0

説明:

中央の行の積 = 1 × 2 × 7 = 14
中央の列の積 = 5 × 2 × 0 = 0

解決のためのアプローチ

  • 行列 mat[][] を入力として受け取ります。
  • 行列全体ではなく、中央の行と中央の列の要素だけを走査します。
  • それぞれの積を計算し、結果を出力します。

アルゴリズム

開始
関数 int product(int mat[][MAX], int n)
    ステップ1 → rproduct = 1、cproduct = 1 を宣言して初期化する
    ステップ2 → i = 0 から i < n まで、i を 1 ずつ増やしながらループ
        rproduct = rproduct * mat[n / 2][i] とする
        cproduct = cproduct * mat[i][n / 2] とする
    ステップ3 → 「中央の行の積: rproduct」を出力する
    ステップ4 → 「中央の列の積: cproduct」を出力する
関数 int main()
    ステップ1 → 行列 mat[][MAX] を宣言・初期化する {
        { 1, 2, 3 },
        { 4, 5, 6 },
        { 7, 8, 9 } }
    ステップ2 → product(mat, MAX) を呼び出す
終了

C言語による実装例

#include <stdio.h>
#define MAX 3

int product(int mat[][MAX], int n){
   int rproduct = 1, cproduct = 1;
   // 中央の要素のみを調べて積を求める
   for (int i = 0; i < n; i++) {
      rproduct *= mat[n / 2][i];
      cproduct *= mat[i][n / 2];
   }
   // 結果の出力
   printf("中央の行の積: %d\n", rproduct);
   printf("中央の列の積: %d\n", cproduct);
   return 0;
}

// ドライバーコード
int main(){
   int mat[][MAX] = {
      { 1, 2, 3 },
      { 4, 5, 6 },
      { 7, 8, 9 } };
   product(mat, MAX);
   return 0;
}

実行結果

上記のコードを実行すると、以下の出力が得られます。

中央の行の積: 120
中央の列の積: 80

コードのポイント

行列のサイズ n が奇数のとき、中央のインデックスは整数除算の n / 2 で求められます。たとえば n = 3 なら n / 2 = 1 となり、インデックス 1 が中央の行・列に対応します。ループの中で mat[n / 2][i](中央の行の各要素)と mat[i][n / 2](中央の列の各要素)を掛け合わせていくことで、1 回の走査で両方の積を同時に計算できます。計算量は O(n) と非常に効率的です。

  1. 【Excel】行と列を固定する方法|ウィンドウ枠の固定と分割機能の使い方

    大きなExcelスプレッドシートを扱っていると、特定のデータを何度も確認しながら比較・入力作業を進めることがよくあります。参照したいデータは行の場合もあれば、列の場合もあります。スクロールするたびに見出しが画面外に消えてしまうと、作業効率が下がり、時間も余計にかかってしまいます。そんなときに役立つのが「ウィンドウ枠の固定(フリーズ)」機能です。この機能を使えば、指定した行や列を常に画面に表示したまま、シートを自由にスクロールできるようになります。この記事では、Excelで行や列を簡単に固定する方法を詳しく解説します。あわせて、「ウィンドウ枠の固定」の代わりに使える「分割」機能による代替手段もご

  2. Excelの列幅・行の高さを自動調整する方法|AutoFit機能の使い方を解説

    Excelの格子状の画面は、ワークシートに保存されたデータに合わせて見た目をカスタマイズできないため、一見すると融通が利かないように感じられることがあります。 しかし実際には、MicrosoftはExcelに、セル内のデータサイズに合わせて列幅や行の高さを瞬時に調整できる機能を標準で搭載しています。 この記事では、Excelの「AutoFit(自動調整)」機能を使って、ワークシート内のデータの大きさに応じて列や行のサイズを自動的に変更する方法を詳しく解説します。 列幅や行の高さを変更する前に知っておきたい制限 Excelでは、列や行のサイズを変更できる範囲には上限と下限があります。まず押さえ