列表

详情


NC222526. 七便士

描述

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

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

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

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

输入描述

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

输出描述

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

示例1

输入:

2
01101101
00010100

输出:

Yes
No

说明:

对于第一组询问: 
放置 4 号圆坑后移至 1 号圆坑。 
放置 4 号圆坑后移至 7 号圆坑。 
便成功放置 7 枚便士。

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++ 解法, 执行用时: 4ms, 内存消耗: 612K, 提交时间: 2021-07-08 13:26:00

#include<iostream>
#include<string>
using namespace std;
int main(){
	int t;cin>>t;
	while(t--){
		string a;cin>>a;
		int cnt=0;
		for(int i=0;i<8;++i) 
			if(a[i]!=a[(i+3)%8])cnt++;			
		if(cnt>2)cout<<"No"<<endl;
		else cout<<"Yes"<<endl;
	}
	return 0;
}

Python3 解法, 执行用时: 29ms, 内存消耗: 4624K, 提交时间: 2022-04-12 15:31:26

for _ in range(int(input())):
    cnt=0
    
    l=[1,4,7,2,5,8,3,6]
    s=input()
    for i in range(7):
        if s[l[i]-1]!=s[l[i+1]-1]:
            cnt+=1
            
            
    if (cnt<=2):print("Yes")
    else:print("No")

上一题