POJ题目 1003Hangover(叠放纸牌)
POJ 1003 叠放纸牌
描述
您可以将多张纸牌悬在桌子上多远?如果您有一张卡,则可以创建一个最大长度为卡长的一半。(我们假设这些卡片必须垂直于桌子。)使用两张卡片,您可以使最上面的卡片悬垂在底部的卡片长度的一半,而最下面的卡片悬垂在桌面的卡片长度的三分之一,总最大悬垂为1/2 + 1/3 = 5/6卡长度。通常,您可以使n张卡片的悬垂度为1/2 + 1/3 + 1/4 + ... + 1 /(n +1)牌的长度,其中顶牌在第二张牌上悬垂1/2,第二张牌在第三张悬垂1/3,第三张在第四张悬垂1/4,依此类推,而底牌在桌子上悬垂1 /。 (n + 1)。如下图所示。
输入
输入由一个或多个测试用例组成,其后一行包含表示输入结束的数字0.00。每个测试用例都是一条包含正浮点数c的单行,其浮点数c至少为0.01,最大为5.20;c将包含三位数字。
输出
对于每个测试用例,输出实现至少c个卡长度的突出所需的最小卡数。使用示例中显示的确切输出格式。
样本输入
1.00 3.71 0.04 5.19 0.00
样本输出
3 card(s) 61 card(s) 1 card(s) 273 card(s)
代码
用while循环,直到超过需要的长度
#include <iostream> using namespace std; int main() { float k,s=0;//定义输入和总和变量 int n;//定义纸牌个数变量 while(1){//循环输入 cin >> k;//输入需要达到的长度 s=0;//初始化 n=2; if(k==0.00) break;//结束循环 while(s<k){//在s没到k是一直加 s+=1.0/n;//s加1/n n++;//n加1 } cout<<n-2<<" card(s)"<<endl;//输出需要纸牌个数 } return 0; }