NYOJ 204题 Coin Test

做这道题对我来说真是费了牛劲了!但不管怎么说,通过了就好。

下面说说我为什么在这道题上走了这么多弯路。

1.题意没理解对。题目中“Please tell him the possiblility of the coin on the right side as a fractional number if the possiblity between the result and 0.5 is no larger than 0.003”,这句话的意思竟然是说“0.003<=result<=0.5”,my god,你也认为是这个意思吗,其实到现在我还是不能接受这个意思。

2.getchar().这道题,先输入了N,之后会有一个回车键,因为后面再输入时是“%c”,所以,刚才的那个回车会被输入到%c里面,就会导致所统计的‘S’‘U’‘D’与实际数目不相符。在这里,我找了半天的错。

3.0.003<=result<=0.5 的比较。有两种方法:第一种,很简单,很好想,就是转化成分数后通分,使分数不等式转化成整数不等式,即(6 * N <= 2000 * u) && (2000 * u <= 1000 * N);第二种,声明一个double变量c,使得c = u * 0.1 / N,这样,u,N,还是整形的,只要if(c >= 0.003 && c <= 0.5)就可以了,这个应该是比较大的收获。

4.如何把一个分数化成最简形式?用到了“最大公约数”,就是让分子分母分别除以它们的最大公约数。

下面是源代码:

#include<stdio.h>
int gcm(int u, int v);
int main()
{
int  i;
int N;
double c;
char a[65540];
scanf("%d", &N);
getchar();
int s = 0, u = 0, d = 0;
for(i = 1; i <= N; i ++)
{
scanf("%c", &a[i]);
if(a[i] == 'S')
s ++;
else if(a[i] == 'U')
u ++;
else
d ++;}
if(s >= 1)
{
printf("Bingo\n");
}
else
{
//c = u * 0.1 / N;
//if(c >= 0.003 && c <= 0.5)
if((6 * N <= 2000 * u) && (2000 * u <= 1000 * N))
{
int num;
num = gcm(u, N);
printf("%d/%d\n", u / num, N / num);
}

else 
printf("Fail\n");
}
return 0;
}
int gcm(int u, int v)
{
if(u == 0) return v;
else
return gcm(v % u ,u);
}   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值