acm基础--POJ No.1003 Hangover

关于运算符号的思考(acm 热身)

POJ No.1003 Hangover

input:
1.00
3.71
output:
3 card(s)
61 card(s)

c
1
2
3
4
5
6
7
8
9
10
11
12
13
#include<stdio.h>
main()
{
int n;
float a,b;
while(scanf("%f",&b)==1)
{
if(b==0.0)break;
a=0.0;
for(n=1;a<b;++n) a+=1.0/(float)(n+1);
printf("%d" card(s) \n",n-1);
}
}

逗号运算符号

while(scanf(“%f”,&b)==1)
compare to
while(scanf(“%f”,&b),b)
结束条件等价于b!=0即使 b 的值为 0.000001f,0.00001
f!=0 为真,也不会结束循环。所以写法(*,b)非常重要

强制类型转换

直接用(float)转换为 int 类型,简单点就写成
for(n=1;al;)

减少变量

省略 int 类型将 n 写入 main(),但是有的编译器并不能通过。所以为了简单清晰,还是不要用的好。

尽量多用 for 循环

直接缩成一行

1
2
3
4
5
6
7
其中包含n省略在main
main(n)
{
float b;
for(;scanf("%f",&b),b;printf("%d card(s)\n",n-1))
for(n=1;b>0;)b-=1./++n;
}
文章作者: lmislm
文章链接: http://blog.booml.cn/2017/05/25/acm00/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Baskerville*