대학생의 그쩍거림/C 언어
(C 언어) 최대 부분합 구하기
탈모탈모대작전
2019. 5. 17. 15:49
728x90
반응형
문제는 다음과 같다.
"
다음 조건을 만족하는 프로그램을 작성하라.
1. 입력으로 2개의 정수를 받는다.
2. 입력받은 두 수 A와 B는 수열 X[A]와 Y[B]에 인수이다.
3. X[A]와 Y[B]를 합하여 수열 S[n]을 만든다.
4. 수열 S[n]에 대하여 최대 연속 부분합을 구한다.
5. 최대 연속 부분합을 만드는 수열 S[n]의 시작 인덱스와 끝 인덱스를 구한다.
"
내가 작성한 코드는 다음과 같다.
#include<stdio.h>
#include<math.h>
int main() {
printf("두 정수 A,B 입력: ");
int A = 0, B = 0;
scanf("%d %d", &A, &B);
double x[20] = { 0 }, y[20] = { 0 }, s[20] = {0};
printf(" x[n] y[n] s[n]");
for (int n = 0; n < 20; n++) {
x[n] = pow((-1), n)*(exp(n - A) + 70);
y[n] = 4000 * cos(2 * 3.1415922653 * (n - 1) / B);
s[n] = x[n] + y[n];
printf("\n");
printf("n= %2d %15.3lf %15.3lf %15.3lf\n", n, x[n], y[n], s[n]);
}
double max=0.0, sum=0.0;
int si, sj;
for (int i = 0; i < 18; i++) {
for (int j = i+2; j < 20; j++) {
sum = 0.0;
for (int k = i; k < j; k++) {
sum += s[k];
}
if (max < sum) {
max = sum;
si = i;
sj = j-1;
}
}
}
printf("\n\n최대 연속 부분합: %.3lf from s[%d] to s[%d]\n\n", max, si, sj);
return 0;
}
728x90
반응형