与えられた整数の並びa1、a2、・・・、anで連続した項の和の最大値を出力して終了するプログラムを作成。
入力は、項数(整数)、1項目(整数)、2項目(整数)、・・・、n項目(整数)
n(項数:2≦n≦100:整数)
a1(第1項:整数)
a2(第2項:整数)
.
.
.
an(第n項:整数)
ai+ai+1+ai+2+ ... +ai+j(連続した項の和の最大値:1≦i<n,1≦j<n-i:整数)
9
5
-1
6
8
-4
-3
4
-2
3
18
2重for文で大丈夫でしょう。条件により2項以上の和でなければいけないのでその点に注意。
#include <stdio.h> int main(){ int n; int a[100]; int i,max; scanf("%d",&n); for(i=0;i<n;i++){ scanf("%d",&(a[i])); } max = 0; //条件より二項以上足し算 for(i=0;i < n-1;i++){ int sum,j; sum = a[i]; for(j=i+1;j<n;j++){ sum+=a[j]; if(max <sum){ max =sum; } } } printf("%d\n",max); return 0; }
もっと効率的なアルゴリズムがあった気もするのですが、とりあえずこれでご勘弁を。