문제

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

색칠된 부분의 곱이 최대가 되며, 그 값은 1.638이다.

입력

첫째 줄은 나열된 양의 실수들의 개수 N이 주어지고, 그 다음 줄부터 N개의 수가 한 줄에 하나씩 들어 있다. N은 10,000 이하의 자연수이다. 실수는 소수점 첫째자리까지 주어진다. 

출력

계산된 최댓값을 소수점 이하 넷째 자리에서 반올림하여 소수점 이하 셋째 자리까지 출력한다.

예제 입력 1

8
1.1
0.7
1.3
0.9
1.4
0.8
0.7
1.4

예제 출력 1

1.638

더보기

Solution

#include<stdio.h>
#include<stdlib.h>

double maximum_partial_array(double *arr,int size)
{
	double mul=1.0, max=arr[0];

	for(int i=0;i<size;i++)
	{
		mul=arr[i]*mul>arr[i]?arr[i]*mul:arr[i];
		max=max>mul?max:mul;
	}

	return max;
}

int main(void)
{
	int N;
	double *arr=NULL;

	scanf("%d", &N);
	arr=(double *)malloc(N*sizeof(double));

	for(int n=0;n<N;n++)
		scanf("%lf", &arr[n]);

	printf("%.3lf\n", maximum_partial_array(arr,N));
	free(arr);
	return 0;
}
728x90

+ Recent posts