- 締切済み
c言語のしつもんです。回答お願いします。
以下のプログラムなのですが配列の中に10個の値が入っていて、例えば3番目の配列ならば2、3、4番目の値を足して最も値が大きくなる配列の番数とその値を求めています。 そして、1番目のときは1,2番目を足した値、10番目のときは9、10番目を足した値とします。 実行してみたところ、8番目で18となりました。 実際は四番目で21となると思うのですが・・・ どこがおかしいか教えてください。 #include<stdio.h> int main(void){ int va[10]={1,3,5,7,9,0,2,4,6,8}; int a,b; int max; max=va[0]; for(a=0;a<9;a++){ if(a==0 && max<va[a]+va[a+1]){ max=va[a]+va[a+1]; b=a; } else if(a==9 && max<va[a-1]+va[a]){ max=va[a-1]+va[a]; b=a; } else{ max=va[a-1]+va[a]+va[a+1]; b=a; } } printf("%d番目:最大値%d",b,max); }
- みんなの回答 (7)
- 専門家の回答
みんなの回答
「どこがおかしいか」という話で言えば,a==1からa==8の場合に最大値を求めるためのif文が無い点です.またa==0とa==9の場合の処理は,特に問題ないでしょう. 題意は,要素数が10の整数配列があるとき,aを配列のインデックス番号とすると,aおよびaと隣り合う要素の合計の最大値を求める.ただしa==0とa==9の場合は計2要素,a==1からa==8の場合は計3要素,という解釈で正しいですか?
- m-take0220
- ベストアンサー率61% (480/785)
int a, b, max, sum; max = va[0]; for ( a=0; a<10; a++ ) { sum=0; if (0<a) sum+=va[a-1]; sum+=va[a]; if (a<9) sum+=va[a+1]; if (max<sum) { max=sum; b=a; } } 私なら、こんな感じの方がわかりやすいですが。
- asuncion
- ベストアンサー率33% (2127/6289)
おっと失礼。題意を取り違えていました。 #include <stdio.h> int main(void) { int va[] = { 1, 3, 5, 7, 9, 0, 2, 4, 6, 8 }; int max, n, i; for (max = va[0], i = 0; i < sizeof(va) / sizeof(va[0]); i++) { if (i == 0) { if (va[i] + va[i+1] > max) { max = va[i] + va[i+1], n = i; } } else if (i == sizeof(va) / sizeof(va[0]) - 1) { if (va[i-1] + va[i] > max) { max = va[i-1] + va[i], n = i; } } else if (va[i-1] + va[i] + va[i+1] > max) { max = va[i-1] + va[i] + va[i+1], n = i; } } printf("%d番目:%d\n", n, max); return 0; }
- asuncion
- ベストアンサー率33% (2127/6289)
隣り合う2要素の和の最大値なのか3要素の和の最大値なのか、 質問文からは判然としません。 ここでは、勝手に後者であると解釈しました。 #include <stdio.h> int main(void) { int va[] = { 1, 3, 5, 7, 9, 0, 2, 4, 6, 8 }; int max, n, i; for (max = va[0], i = 1; i < sizeof(va) / sizeof(va[0]) - 1; i++) { if (va[i-1] + va[i] + va[i+1] > max) { max = va[i-1] + va[i] + va[i+1], n = i; } } printf("%d番目:%d\n", n, max); }
- black2005
- ベストアンサー率32% (1968/6046)
#2です。 途中で投稿してしまった・・・ else{ max=va[a-1]+va[a]+va[a+1]; b=a; } また、無条件でmaxを更新して問題ありませんかね?
- black2005
- ベストアンサー率32% (1968/6046)
else{ max=va[a-1]+va[a]+va[a+1]; b=a; } このelse文が、a==0やa==9でも実行されてしまうのが理解できますか? a==0の時に実行されると、va[-1]+・・・となり予期せぬ結果となりますね。
- tsunji
- ベストアンサー率20% (196/958)
問題が意味不明 配列vaが10個しかないのに、足した値の配列の番号の中身とか10越えてたら、プログラムとして成り立ってないんだけど。