ここから本文です

質問失礼します。

kag********さん

2017/10/1814:35:08

質問失礼します。

プログラミングの問題で部分方陣の問題で実行時に mと nとを入力し, m行 n列の要素を含む左下から右上がりライン全体にあるすべての要素の合計値を求めるプログラムを作成したいのですが斜め上がりの計算方法が分からないので困っています。下記に自分のソースコードを書きますので教えてください。ちなみに(1,1)方陣を軸にした右斜めの合計値を求めたいです。

#include <stdio.h>
#define M 3
#define N 4
int main(void) {
int a[M][N]={
{1, 7, 1, 4},
{9, 3, 5, 1},
{4, 0, 3, 5}
};
int m, n, sum;/*sumは右上がり部分方陣の合計値*/
int i, j;
sum=0;

printf("配列a[%d][%d]:", M, N);
for(i=0; i<M; i++){
for(j=0; j<N; j++){
printf("%d", a[i][j]);
}
printf("\n");
}
printf("m");
scanf("%d", &m);
printf("n");/* m, nをキーボードから入力*/
scanf("%d", &n);
/* 指定された要素を含む右上がりライン全体の合計値 sumの計算処理 */
for(i=0; i<m; i++){
for(j=n; j<N; j++){
sum += a[i][j];
}
}
/* 計算結果 sumの表示 */
printf("右上がりライン(%d,%d)部分方陣の合計 = %d\n",
m, n, sum);

return 0;
}

補足補足するとこの問題での(1,1)を軸にしたのは3になるので3を軸にした斜めの計算は4+3+1=8なので合計値は8になってほしいです。

閲覧数:
86
回答数:
2
お礼:
25枚

違反報告

ベストアンサーに選ばれた回答

g00********さん

2017/10/1815:40:31

#include <stdio.h>
#define M 3
#define N 4
int main(void) {
int a[M][N]={
{1, 7, 1, 4},
{9, 3, 5, 1},
{4, 0, 3, 5}
};
int m, n, sum;/*sumは右上がり部分方陣の合計値*/
int i, j;
sum=0;

printf("配列a[%d][%d]\:\n", M, N);
for(i=0; i<M; i++){
for(j=0; j<N; j++){
printf("%d", a[i][j]);
}
printf("\n");
}
printf("m");
scanf("%d", &m);
printf("n");/* m, nをキーボードから入力*/
scanf("%d", &n);
/* 指定された要素を含む右上がりライン全体の合計値 sumの計算処理 */
for(i=0; i<M; i++){//0から回す
for(j=0; j<N; j++){//0から回す
if(i+j==m+n){//横と縦の合計がMとnの合計なら加算斜めは必ず合計が同じになるので
sum += a[i][j];
}
}
}
/* 計算結果 sumの表示 */
printf("右上がりライン(%d,%d)部分方陣の合計 = %d\n",
m, n, sum);

return 0;
}
いろいろ見やすく改良しました

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

ベストアンサー以外の回答

1〜1件/1件中

2017/10/1815:51:17

これでいけるかな?


for(i=M-m,j=n-1;j<N&& i>=0; i--,j++){
printf("%d %d %d\n",i,j,a[i][j]);
sum += a[i][j];
}

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる