로봇이 되고픈 부엉이

(C 언어) 최대 부분합 구하기 본문

대학생의 그쩍거림/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
반응형