问题
两个人玩俄罗斯转盘,已知子弹的排列,第一枪是空的,想要第二枪也是空的,应该怎么做?两种选择,SHOOT(顺序的下一颗弹舱)或者ROTATE(随机的一个弹舱),都一样的话输出EQUAL
分析
#include <cstring>
#include <cstdio>
#include <vector>
#include <iostream>
#include <cmath>
#include <vector>
using namespace std;
typedef long long ll;
const int maxn=100+10;
const double eps=1e-6;
char ch[maxn];
int main(void){
while(scanf("%s",ch)!=EOF){
int len=strlen(ch),n0=0,n1=0; //0和1的数量,加起来是总和
int n=0; //连续两次是空的情况数量
for(int i=0;i<len;++i){
if(ch[i]=='0') n0++;
else n1++;
}
ch[len]=ch[0];
for(int i=0;i<len;++i){
if(ch[i]=='0' && ch[i+1]=='0') n++;
}
double ans1=(double)n0/len; //rotate
double ans2=(double)n/n0; // n:shoot
if(ans1>ans2+eps) printf("ROTATE\n");
else if(ans1<ans2-eps) printf("SHOOT\n");
else printf("EQUAL\n");
}
}