[더블릿] 행오버
프로그래밍/알고리즘2012. 1. 4. 21:24
프로그램 명: hangover
제한시간: 1 초
얼마나 멀리 테이블 위에 카드를 쌓아 돌출 시킬 수 있을까?
만약 카드 한장을 가지고 있다면 카드 길이의 반 만큼의 돌출부를 만들 수 있다. (카드는 반드시 테이블에 수직으로 놓는다) 카드가 두개 있으면 맨 위의 카드는 아래 카드 위에 카드 길이의 반만큼 돌출 할 수 있고, 바닥의 카드는 테이블위에 카드 길이의 1/3만큼 돌출 할 수 있다. 따라서 돌출부분의 총 합은 카드 길이의 5/6(1/2+1/3)이 된다.
일반적으로 n개의 카드를 쌓아 돌출 시킬 때 가장 위에 있는 카드는 2번째 카드 위에 1/2이 돌출되어 있고, 2번째 카드는 3번째 카드에 1/3이, 3번째 카드는 4번째 카드위에 1/4이, .. 그리고 바닥의 카드는 테이블 위에 1/(n+1)이 돌출되어 총 길이는 카드길이의 1/2 + 1/3 + 1/4 + ... + 1/(n+1) 이 된다.
이 모습을 아래 그림에 나타내었다.
입력
입력의 첫 줄에 양의 실수 c 가 주어진다. 이 값은 적어도 0.01 이상 5.20 이하이다. 총 자리수는 세자리.출력
각각의 테스트 케이스에 대하여 적어도 입력 c 만큼의 카드 길이를 만들 수 있는 최소한의 필요 카드 개수를 출력하라. 예를 보고 정확한 출력 양식을 사용하라.입출력 예
입력 1.00 출력 3 card(s) 입력 3.71 출력 61 card(s) 입력 0.04 출력 1 card(s) 입력 5.19 출력 273 card(s)
출처: Mid-Central USA 2001 번역: makecode
#include <stdio.h>
int main() {
double c, n;
int cnt = 0;
scanf("%lf", &c);
for (n = 2; c > 0; n++, cnt++)
c -= 1/n;
printf("%d card(s)", cnt);
return 0;
}
'프로그래밍 > 알고리즘' 카테고리의 다른 글
프로그램 명: suffix_array(open) (0) | 2012.06.22 |
---|---|
[Finite Automata, computational geometry] 내부점 판별 (in_out) (0) | 2012.01.16 |
[더블릿] KnapSack (0) | 2012.01.06 |
버스 (0) | 2012.01.03 |
촌수 계산[백트래킹] (0) | 2011.12.30 |