PTA 玩玩轮盘 水题(详细注释)

一天,fish 与 sheep 在玩俄罗斯轮盘。
游戏描述:俄罗斯轮盘是一种自杀式玩命游戏。参与者在左轮手枪的弹巢放入一颗子弹或多颗子弹,关上弹巢后将子弹盘向顺时针任意旋转。参与者轮流把手枪对着自己的头开枪,每次按下扳机后弹巢会顺时针旋转一个子弹孔;直至有人中枪为止,未中枪的人则获胜

注:每个弹孔都有一个编号,旋转方向为顺时针,如图编号依次顺序是1,2,3,4,5,6.

wheel_003.jpg

输入格式:

第一行输入6个为1或0的整数 a1​…a6​,表示弹巢中的6个子弹孔,其中1表示装有子弹,0表示没有。并保证测试数据中至少有一发子弹

第二行输入一个字符串,表示第一个扣动扳机的玩家。

第三行输入一个整数 m,表示在开始轮流开枪前,旋转子弹盘过程中,转过枪管的子弹孔的总次数(次数为0,表示关上后不转动弹巢)。(0≤m≤10^9)

输出格式:

第一行输出6个整数,表示转完后扣下扳机前,手枪内子弹的顺序(每个数末尾都有空格)

第二行输出一个字符串,表示谁赢了(轮流开枪后存活的人获胜)。

输入样例:

1 0 0 0 0 0
sheep
15

输出样例:

0 0 0 1 0 0 
sheep

思路:简单模拟,已知弹匣6次为一循环,直接对 6 取模将1e9的循环优化至6次以内。

坑点:1. 不知道是我阅读理解有问题还是作者 Stupidsheep 真的 stupid ,顺时针操作就是不行,一定要反过来逆时针模拟才能AC,不然只有2分。

2.末尾有空格 。

c++代码

#include<bits/stdc++.h>
#define int long long
using namespace std;
signed main(){
	vector<int>v;
	for(int i=0;i<6;i++){
		int a;cin>>a;
		v.push_back(a);
	}
	string name;cin>>name;
	int m;cin>>m;
	m %= 6;//6次一个循环,转了6次等于没赚,直接从 1e9 优化到 6 
	m = (6-m+6)%6; //不知道是我阅读理解有问题还是作者 Stupidsheep 真的 stupid ,顺时针操作就是不行,一定要反过来。 
	while(m--){
		v.push_back(v[0]);//转动 m 次
		v.erase(v.begin());
	} 
	for(int i=0;i<6;i++)cout<<v[i]<<" \n"[i==5];	
	for(int i=0;i<6;i++){	
		if(v[i]==1){
			if(i%2!=0){
				cout<<name<<endl;
			}else{
				if(name=="sheep")cout<<"fish"<<endl;
				else cout<<"sheep"<<endl;
			}
			break;//只要有一人死亡,就得break,样例中存在多发子弹的情况
		}
	}
	return 0;
} 

  • 9
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值