[UVa1636]Headshot

本文探讨了一个概率问题:在已知第一枪未击中目标的情况下,分析直接再次射击与重新旋转左轮手枪后射击,哪种方式未击中目标的概率更高。通过对比“00”和“0”的数量,以及总数量,得出结论并提供了C++代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目大意:给你一把左轮手枪,随机装上子弹。现在你已经打了一枪,没有子弹,问你是直接再打一枪没有子弹的几率高,还是随机转一下没有子弹的几率高,或者一样高?

(数据中0表示没有子弹,1表示有)

解题思路:简单概率问题。

直接再打一枪没有子弹的几率就是“00”的个数除以“00”和“01”的总个数(第一枪没子弹),而“00”和“01”的总个数就是“0”的个数(有“0”必定有“00”或“01”,除非只有一个)。

而随机转一下没子弹的概率就是“0”的个数除以总个数。

那么设“00”有a个,“0”有b个,总个数为n,则比较$\frac{a}{b}$和$\frac{b}{n}$即可。

这个也可以转化为比较$an$和$b^2$,我认为这样更好,因为b可能为0,此时就会出现除以0导致答案错误的情况,而且这么做没有浮点误差。

然后随便统计一下即可。

C++ Code:

#include<cstdio>
#include<cstring>
char s[11111];
int _00,_0;
int main(){
	while(scanf("%s",s)!=EOF){
		int i,len=strlen(s);
		_00=_0=0;
		if(s[0]=='0')++_0;
		for(i=1;i<len;++i){
			if(s[i]=='0'){
				++_0;
				if(s[i-1]=='0')++_00;
			}
		}
		if(s[len-1]=='0'&&s[0]=='0')++_00;
		if(_00*len==_0*_0)puts("EQUAL");else
		if(_00*len>_0*_0)puts("SHOOT");else
		puts("ROTATE");
		memset(s,0,sizeof s);
	}
	return 0;
}

 

  

 

转载于:https://www.cnblogs.com/Mrsrz/p/7707737.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值