티스토리 뷰

1. 문제 링크

https://www.acmicpc.net/problem/2670

 

2670번: 연속부분최대곱

N개의 양의 실수가 있을 때, 한 개 이상의 연속된 수들의 곱이 최대가 되는 부분을 찾아, 그 곱을 출력하는 프로그램을 작성하시오. 예를 들어 아래와 같이 8개의 양의 실수가 주어진다면, 색칠된

www.acmicpc.net

2. 문제 개요

N개의 양의 실수가 있을 때, 한 개 이상의 연속된 수들의 곱이 최대가 되는 부분을 찾아 그 곱을 출력하는 프로그램을 작성하시오.

 

 

3. 문제 힌트

우선 모두 자기 자신만 곱한 걸 나타내기 위해 초기화는 자기 자신들로 해주자.

 

곱해 나갈 때, 곱한 결과가 자기 자신보다 크다면 누적하는 그런 형태로 나타내 주자. 

음수가 없기 때문에 문제는 없다. 코드를 보는 편이 이해가 더 잘 될 것 같다.

 

4. 코드

#include <cstdio>
#include <algorithm>
using namespace std;

int n;
double arr[10001];
double ans = 0;

int main()
{
	scanf("%d", &n);
	for (int i = 1; i <= n; ++i)
		scanf("%lf", &arr[i]);

	ans = arr[1];

	for (int i = 2; i <= n; ++i) {
		if (arr[i] * arr[i - 1] >= arr[i]) {
			arr[i] = arr[i - 1] * arr[i];
		}
		ans = max(ans, arr[i]);
	}

	printf("%.3lf", ans);
	return 0;
}

 

5. 결과

댓글
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Total
Today
Yesterday