问题 A: 叠卡片1012
题目描述
你能在多大程度上将一叠卡片悬挂在桌子上?如果你有一张卡,则可以创建最长半张卡长度。(我们假设卡片必须垂直于桌子)使用两张卡片,你可以使顶部卡片从卡片长度的一半到底部,而底部卡片在卡片长度的三分之一处伸出桌面,总长度为1/2 + 1/3 = 5/6卡长度。一般来说,你可以通过1/2 + 1/3 + 1/4 + ... + 1 /(n + 1)卡长度使n卡悬空,其中顶部卡悬伸出第二个卡的部分为1/2,第二个悬伸出第三个卡的部分为1/3,第三个悬伸出第四个卡的部分为1/4等,底部卡悬伸出桌子的部分为1 /(n + 1)。 这在下图中说明。
输入
输入包含一个或多个测试用例,最后为一个包含数字0.00的行,表示输入结束。每个测试用例是包含正浮点数c的单行, 0.01<=c<=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)
题解:
c++语言基础题,循环即可
#include<bits/stdc++.h>
using namespace std;
float n;
int main()
{
while(cin>>n&&n!=0)//注意n!=0
{
float sum=0;
int ans=0;
for(int i=2;i<=INT_MAX;i++)
{
if(sum>=n)break;
sum=sum+1.0/i;
ans++;//有几张卡片
}
printf("%d card(s)\n",ans);//输出
}
}
问题 B: 计算e1013
题目描述
e的简单数学公式是e=1/0!+1/1!+... + 1/n!,允许n为无穷大。这实际上可以使用相对较小的n值产生非常精确的e近似值。
输入
没有输入。
输出
输出所有由上述公式生成的e的近似值,其中n的值为从0到9。输出的开头应类似于下图所示。
样例输出
n e - ----------- 0 1 1 2 2 2.5 3 2.666666667 4 2.708333333
题解:
这输出挺烦的,注意在输出时小数位后面的0要舍去(例如2.5不要输成2.500000)
所以前三组输出单独输出,再循环求阶乘。
#include<bits/stdc++.h>
using namespace std;
int main()
{
int i,j;
long