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

题目描述

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

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

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

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

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

为更好理解七便士谜题规则,现将圆坑按顺时针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
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"<

你可能感兴趣的:(#,基础算法c,c++,算法)