河南省第十三届ICPC程序设计竞赛 I题-七便士

题目描述

七便士谜题是一个古老的谜题(如下左图),其规则如下:

• 方盘上有八个圆坑,每个圆坑能正好放置一枚便士,每个圆坑与其他另外两个圆坑相连(图中黑线);
• 每次操作分为两部分:(每次操作两部分缺一不可)

  1. 将一枚便士放置于一个尚未放置便士的圆坑中;
  2. 再将该便士沿着黑线移动至另一尚未放置便士的圆坑中;

• 目标为成功放置七枚便士;

为更好理解七便士谜题规则,现将圆坑按顺时针1~8编号,如上右图所示,i (1≤i≤8)i\ (1 \leq i \leq 8)i (1≤i≤8)圆坑与(i+2)mod  8+1(i+2)\mod 8+1(i+2)mod8+1圆坑和(i+4)mod  8+1(i+4)\mod 8+1(i+4)mod8+1圆坑间分别存在一条边。
布丁曾尝试解这个谜题,但是中途被艾洛叫去玩游戏了,于是留下了一个七便士残局。
现在问题是,在方盘上已经存在一些硬币的情况下,是否能够通过一定的操作达成在方盘上放置七便士的目标。

输入描述:

第一行,一个整数T,表示有T (1≤T≤255)T\ (1 \leq T \leq 255)T (1≤T≤255)组询问。
对于每组询问,输入一行,包含一个长度为8的01字符串,表示放置状况,第i个字符为 '\textbf{1}' 表示i号圆坑上已经存在一枚便士,为'0'则无,保证'1'的个数≤7\leq 7≤7。

输出描述:

对于每组询问,输出一行,一个字符串。"Yes"表示能够放置7枚便士,反之输出"No"(不包括引号)。

示例1

输入

2
01101101
00010100

输出

Yes
No

 

#include<iostream>
using namespace std;
char g[10];
int d[10]={0,1,4,7,2,5,8,3,6};
int main()
{
	int t;cin>>t;
	while(t--)
	{
		int cnt=0;
		for(int i=1;i<=8;i++)
		{
			cin>>g[i];
			if(g[i]=='1')
				cnt++;
		}	
		if(g[6]=='0'&&g[1]=='0'&&cnt!=0) cnt++;//圆盘上一个硬币都没有的时候,按顺序将硬币放在盘子上
		for(int i=1;i<8;i++)
		{
			if(g[d[i]]=='0'&&g[d[i+1]]=='0')//如果该位置与该位置相连的下一个位置都是空的,那么在此位置放置硬币
				cnt++;
			
		}
		if(cnt==7) cout<<"Yes"<<endl;
		else cout<<"No"<<endl;
	}
	return 0;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值