Cプログラムで2次元行列の四隅の要素とその合計を出力する方法
概要
サイズ2×2以上の2次元配列(行列)が与えられたとき、その四隅に格納されているすべての要素を取り出し、合計を求めて出力するのが本記事のテーマです。
四隅の要素とは?
行数「r」、列数「c」(いずれも0から開始)をもつ行列 mat[r][c] を考えると、四隅の要素は次の4つになります。
- 左上:mat[0][0]
- 右上:mat[0][c-1]
- 左下:mat[r-1][0]
- 右下:mat[r-1][c-1]
したがって、求める合計は次の式で表されます。
mat[0][0] + mat[0][c-1] + mat[r-1][0] + mat[r-1][c-1]
これらの四隅の要素を取得して加算し、その結果を画面に出力するのがタスクです。

実行例
Input: 行列の要素を入力 :
10 2 10
2 3 4
10 4 10
Output: 行列の合計 : 40
アルゴリズム
START
Step 1→ 行数・列数をマクロで定義(#define row 3、#define col 3)
Step 2→ main()
int sum=0、配列 a[row][col]、変数 int i,j,n を宣言
ループ(i=0;i<3;i++)
ループ(j=0;j<3;j++)
a[i][j] を入力
ループ終了
ループ終了
四隅の合計 a[0][0]+a[0][col-1]+a[row-1][0]+a[row-1][col-1] を出力
STOP
C言語での実装例
#include<stdio.h>
#define row 3
#define col 3
int main(){
int sum=0,a[row][col],i,j,n;
printf("Enter the matrix elements : ");
for(i=0;i<row;i++){
for(j=0;j<col;j++){
scanf("%d",&a[i][j]);
}
}
printf("sum of matrix is : %d",a[0][0]+a[0][col-1]+a[row-1][0]+a[row-1][col-1]);
return 0;
}
出力結果
上記のプログラムをコンパイルして実行すると、次のような出力が得られます。
Enter the matrix elements : 10 2 10 2 3 4 10 4 10 sum of matrix is : 40
ポイント解説
この例では、四隅の要素がそれぞれ 10、10、10、10 であるため、合計は 10+10+10+10=40 となります。中央や辺上の要素は合計に含まれない点に注意しましょう。
なお、元のコードでは添字に row と col が混在していましたが、ここでは正方形以外の行列でも正しく動作するよう、列方向の添字には col-1、行方向の添字には row-1 を用いる形に整理しています。
-
C++で行列の各列の0の個数に基づいて列をソートし、インデックスを出力する方法
N行M列のサイズを持つ行列が与えられたとき、各列に含まれる0の個数を数え、その個数に基づいて列をソートし、ソート後の列のインデックスを出力するのが課題です。 例えば、1列目に0が1つ含まれ、2列目には0がまったく含まれず、3列目に0が2つ含まれている場合、0の少ない順に並べると出力は「2 1 3」になります。 入力例と出力例 Input: 0 0 0 1 1 1 1 0 1 Output: 1 3 2 解説 上記の入力における各列の0の個数は次のとおり
-
C++プログラム:配列内の各要素の最後の出現を相対的な順序で出力する方法
配列 a[] が与えられたとき、リスト内の各要素について最後に出現したものだけを出力するのが本記事の目的です。ここでは単純に重複要素を削除するだけでなく、各要素が配列内で最後に出現したタイミングに基づき、元の相対的な順序を維持したまま出力する必要があります。例えば、6つの要素を持つ配列 {1, 3, 2, 3, 1, 2} には重複した値が含まれています。この場合、期待される結果は「3 1 2」になります。入力例と出力例Input: a[]={4,2,2,4,1,5,1} Output : 2 4 5 1この例では、「2」はインデックス2で最後に出現し、「4」はインデックス3、「5」はインデッ