翻纸牌游戏

news/2024/11/8 0:28:51/

有一种纸牌游戏,很有意思,给你N张纸牌,一字排开,纸牌有正反两面,开始的纸牌可能是一种乱的状态(有些朝正,有些朝反),现在你需要整理这些纸牌。但是麻烦的是,每当你翻一张纸牌(由正翻到反,或者有反翻到正)时,他左右两张纸牌(最左边和最右边的纸牌,只会影响附近一张)也必须跟着翻动,现在给你一个乱的状态,问你能否把他们整理好,使得每张纸牌都正面朝上,如果可以,最少需要多少次操作。
Input
有多个case,每个case输入一行01符号串(长度不超过20),1表示反面朝上,0表示正面朝上。
Output
对于每组case,如果可以翻,输出最少需要翻动的次数,否则输出NO。
Sample Input
01
011
Sample Output
NO
1

本题主要是需要考虑两边翻动的话可以只翻动两张牌,而中间的翻动却要翻动三次,可以将其当作两种情况来考虑,一种是左边不翻动,直接从第二个开始翻动,然后翻动相邻两个(相当于从第一个开始连续翻动三个),一直翻动到倒数第二个即可,而另一种情况就是先翻动前面两个,再按照刚刚那样翻动即可。

#include<bits/stdc++.h>
using namespace std;
int main(){string s;int book[100], sign[100];while(cin>>s){memset(book,0,sizeof(book));memset(sign,0,sizeof(sign));for(int i=0; i<s.length(); i++){book[i] = s[i]-'0';sign[i] = s[i]-'0';if(book[i]==0){ //将0用-1来表示,待会方便翻转book[i] = -1;sign[i] = -1;}}book[0] = -book[0], book[1] = -book[1];//考虑到先翻前两个的时候int sum = 1;//翻动次数要加1for(int i=0; i<s.length()-1; i++){//从第一个开始连续翻三个if(book[i]==1){book[i] = -book[i];book[i+1] = -book[i+1];book[i+2] = -book[i+2];sum++;}}int flat=0;if(book[s.length()-1]==1){//判断是否反转成功flat=1;}int sum2=0;//不考虑翻转前两个的情况for(int i=0; i<s.length()-1; i++){if(sign[i]==1){sign[i] = -sign[i];sign[i+1] = -sign[i+1];sign[i+2] = -sign[i+2];sum2++;}}int glat=0;//判断是否反转成功if(sign[s.length()-1]==1){glat=1;}if(flat&&glat){//如果2种情况都不成功输出Nocout<<"NO"<<endl; }else{if(flat==0&&glat==0)//两种情况都符合就找最小的那个,否则哪个成功输出哪个cout<<min(sum,sum2)<<endl;else if(flat==0)cout<<sum<<endl;else cout<<sum2<<endl;}}
}

http://www.ppmy.cn/news/218901.html

相关文章

翻牌游戏概率模拟

假如有9张扣着的牌&#xff0c;其中7张普通牌各自翻出猫的概率相同&#xff0c;比如5%能翻出来( 95%翻出来不是猫)&#xff0c;一 张简单牌&#xff0c;翻出来猫的概率是20%&#xff0c;一张困难牌&#xff0c;翻出来猫的概率是1%。我现在有三轮翻牌机会&#xff0c;每轮都可以…

Js 简单实现翻牌小游戏

1.简介 非常简单的一个网络消消乐翻牌小游戏的实现&#xff0c;代码量较少&#xff0c;不过遇到的bug和自行开发的步骤十分有纪念意义。 2.核心代码块 生成随机数列&#xff0c;确定图片随机分布 function getImgIndex(is){var index parseInt(Math.random()*8)1;if(is[in…

翻牌动画

效果如下(可兼容移动端)&#xff1a; css部分&#xff1a; <style type"text/css"> *, *:before, *:after { box-sizing: border-box; } html { font-size: 18px; line-height: 1.5; font-weight: 300; color: #333; font-family: "Nunito …

js 翻牌小游戏

js 翻牌小游戏 效果图 链接 PC端翻牌小游戏 需求分析 生成两组顺序随机的1-8数据卡片需要有翻转效果两次翻转数据不相等&#xff0c;回复原状两次翻转数据相等&#xff0c;卡片相等&#xff0c;不能再被点击当所有卡片不能被点击游戏结束限制最大点击次数50次 HTML结构 &…

JAVA记忆翻牌游戏制作

游戏功能需求说明代码编写 1 框架搭建2 主要技术难点 21 图片面板对应的图片索引获取22 图片面板 3 完整代码 游戏截图 1启动后界面2开始游戏界面3游戏结束界面 1 游戏功能需求说明 该游戏主要模拟常见的翻牌游戏&#xff0c;即找到所有两两相同的牌认为游戏成功&#xff0c;主…

js实现翻牌游戏

在我的项目中需要在里面添加一个翻牌游戏&#xff0c;就研究了一下&#xff0c;在这里只实现了基本的效果。不多说&#xff0c;和大家分享一下。 说到翻牌游戏&#xff0c;大致分为以下几个步骤&#xff1a; 绘制正反面卡牌-------------->洗牌----------------------->…

Qt 在 VS2017 上的安装配置

Qt5.0 以上的版本可以较好地满足一些软件项目开发的要求&#xff0c;并且移植性强。Qt 中包含 很多库函数用来支持 UI 界面的设计开发。所以可选择 Qt 与 VS2017 相结合的 开发方式。由于 Qt 是安装在 VS2017 上的插件&#xff0c;所以需要下载相关的 vsaddin-msvc2017 插件。 …

Qt的安装及配置

一、Qt的安装 1.下载链接 或者 网盘下载 链接: https://pan.baidu.com/s/15Fwh8kOtrj4GIIg6ptnb7A 提取码: uvar 2.先注册账号&#xff0c;用自己的qq邮箱就可(注意&#xff1a;密码要有数字和大小写字母) 3.看图 4. 第一个&#xff1a;通过在Q中启用发送假名使用统计数据来…