HangOver
Time Limit: 2000/1000 MS (Java/Others)????Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 7693????Accepted Submission(s): 3129
Problem Description
How far can you make a stack of cards overhang a table? If you have one card, you can create a maximum overhang of half a card length. (We're assuming that the cards must be perpendicular to the table.) With two cards you can make the top card overhang the bottom one by half a card length, and the bottom one overhang the table by a third of a card length, for a total maximum overhang of 1/2 + 1/3 = 5/6 card lengths. In general you can make n cards overhang by 1/2 + 1/3 + 1/4 + ... + 1/(n + 1) card lengths, where the top card overhangs the second by 1/2, the second overhangs tha third by 1/3, the third overhangs the fourth by 1/4, etc., and the bottom card overhangs the table by 1/(n + 1). This is illustrated in the figure below.
?
The input consists of one or more test cases, followed by a line containing the number 0.00 that signals the end of the input. Each test case is a single line containing a positive floating-point number c whose value is at least 0.01 and at most 5.20; c will contain exactly three digits.
For each test case, output the minimum number of cards necessary to achieve an overhang of at least c card lengths. Use the exact output format shown in the examples.
?
?
Sample Input
1.00 3.71 0.04 5.19 0.00
?
?
Sample Output
3 card(s) 61 card(s) 1 card(s) 273 card(s)
?
?
Source
?
題目沒什么難度,分明就是某年NOIP的級數求和,不過題目里如果不說,我還真不一定能想到,這個結論得記一下.
#include<stdio.h>
#include
<
string
.h>
int
f[
1024
];
double
s[
1024
];
void
getprepared()
{
memset(f,
0
,
sizeof
(f));
memset(s,
0
,
sizeof
(s));
s[
1
]=
0.5
;
for
(
int
i=
2
;i<=
1000
;i++) s[i]=s[i-
1
]+
1.0
/(i+
1
);
for
(
int
i=
1
;i<=
520
;i++
)
{
double
x=i/
100.0
;
for
(
int
j=
1
;j<=
1000
;j++
)
if
(s[j]>=
x)
{
f[i]
=
j;
break
;
}
}
}
int
main()
{
getprepared();
double
ss;
while
(scanf(
"
%lf
"
,&ss)!=
EOF)
{
if
(ss==
0
)
return
0
;
int
x=
100
*
ss;
printf(
"
%d card(s)\n
"
,f[x]);
}
return
0
;
}
?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元

