首页 > 编程语言 >【每日例题】蓝桥杯 c++ 小郑下五子棋

【每日例题】蓝桥杯 c++ 小郑下五子棋

时间:2023-11-15 16:02:30浏览次数:32  
标签:棋盘 20 28 五子棋 小张 蓝桥 棋子 例题

小郑下五子棋

题目

五子棋是—种两人对弈的棋类游戏,它使用黑白两种棋子在一个20×20的棋盘上进行。黑方执黑棋,白方执白棋。双方轮流下棋,目标是先在横向、纵向或斜向连成五个己颜色的棋子,即五子相连,即可获胜。五子棋是—种简单却富有策略的游戏,常常被用于智力训练和竞技比赛。这不,小郑在和小张玩五子棋,下到一半,小郑在某—次落子后,突然被爸妈喊去吃饭了,此时小郑或小张并没有获得五子棋的胜利。
吃完饭小郑回来发现,整个五子棋世界都变了。
小郑想知道小张有没有更改过棋盘,可是她已经想不起来他走之前棋盘是什么样子的了。
为了简化题目,你可以认为以下情况是小张作弊了。
1、小郑或小张已经获得了胜利。2、黑白子数数量之差大于1。
输入格式
输入数据包含20行,每行包含20个字符(格子),.表示该位置为空,。表示小郑的棋子,x表示小张的棋子。
输出格式
如果小张没有作弊,输出Yes,否则输出No。

思路分析

  需要进行两种条件判断,判断棋子之差是否大于1,这个只需要遍历棋盘上的棋子,然后计数即可;看有没有人已经获胜,即连成五子,这个可以用if语句进行判断,可以结合数组确定棋子位置即可。

  简单题直接暴力解法即可,但是有一个小点不确定是代码问题还是检验的数据挖的坑,由于棋盘为20×20,按道理用if语句进行判断五子是否连线时已经将其计算在内,但是需要拓展棋盘,将棋盘变为28×28才可通过该案例。

代码

#include <iostream>
using namespace std;
int main()
{
  char a[28][28];
  int countx=0,county=0;
  //补充棋盘输入案例未输入区域
  for(int i=0;i<28;i++)
  {
    for(int j=0;j<28;j++)
    {
        a[i][j]='.';
    }
  }
  //输入
  for(int i=4;i<24;i++)
  {
    for(int j=4;j<24;j++)
    {
        cin>>a[i][j];
    }
  }
  //黑白子之差大于1/获得胜利
  for(int i=4;i<24;i++)
  {
    for(int j=4;j<24;j++)
    {
      if(a[i][j]=='o')
      {
        if(a[i+1][j]=='o'&&a[i+2][j]=='o'&&a[i+3][j]=='o'&&a[i+4][j]=='o')//竖
        {
          cout<<"No";
          return 0;
        }
        if(a[i][j+1]=='o'&&a[i][j+2]=='o'&&a[i][j+3]=='o'&&a[i][j+4]=='o')//横
        {
          cout<<"No";
          return 0;
        }
        if(a[i+1][j-1]=='o'&&a[i+2][j-2]=='o'&&a[i+3][j-3]=='o'&&a[i+4][j-4]=='o')//斜
        {
          cout<<"No";
          return 0;
        }
        if(a[i+1][j+1]=='o'&&a[i+2][j+2]=='o'&&a[i+3][j+3]=='o'&&a[i+4][j+4]=='o')
        {
          cout<<"No";
          return 0;
        }
        countx++;
      }
      if(a[i][j]=='x')
      {
        if(a[i+1][j]=='x'&&a[i+2][j]=='x'&&a[i+3][j]=='x'&&a[i+4][j]=='x')//竖
        {
          cout<<"No";
          return 0;
        }
        if(a[i][j+1]=='x'&&a[i][j+2]=='x'&&a[i][j+3]=='x'&&a[i][j+4]=='x')//横
        {
          cout<<"No";
          return 0;
        }
        if(a[i+1][j-1]=='x'&&a[i+2][j-2]=='x'&&a[i+3][j-3]=='x'&&a[i+4][j-4]=='x')//斜
        {
          cout<<"No";
          return 0;
        }
        if(a[i+1][j+1]=='x'&&a[i+2][j+2]=='x'&&a[i+3][j+3]=='x'&&a[i+4][j+4]=='x')
        {
          cout<<"No";
          return 0;
        }
        county++;
      }
    }
  }
  if((countx-county>1)||(county-countx>1))
  {
    cout<<"No";
    return 0;
  }
  else
  {
    cout<<"Yes";
  }
  return 0;
}

  

标签:棋盘,20,28,五子棋,小张,蓝桥,棋子,例题
From: https://www.cnblogs.com/hcrzhi/p/17834057.html

相关文章

  • 【每日例题】蓝桥杯 c++ 被替换的身份证
    被替换的身份证题目蓝桥杯被替换的身份证思路分析斗地主简化版?!废话少说,四种情况ShallowDream一开始出对子或者王炸,ShallowDream胜ShallowDream一开始出单,Joker出王炸,Joker胜ShallowDream一开始出单,Joker手中最大的牌比ShallowDream手中的牌都大,Joker胜ShallowDream一开......
  • 【1111算法题】蓝桥杯 c++(一)第一二题
    【1111算法题】第一题双十一的祈祷【算法赛】题目双十—,不仅是购物狂欢节,更有"光棍节"之称。这源于11:11由四个1构成,象征着单身。作为大学生的小蓝也想经历甜甜的校园恋爱,于是他找到了爱神丘比特,向他祈祷能为自己带来—段邂逅。丘比特是乐于助人的,他承诺小蓝只要回答出一个简......
  • 第十五届蓝桥杯模拟赛 -- 删掉m个字符使得字典序最小
    第十五届蓝桥杯模拟赛--删掉m个字符使得字典序最小贪心+单调栈importjava.util.Deque;importjava.util.LinkedList;importjava.util.Scanner;publicclassMain{ publicstaticvoidmain(String[]args){ Scannerscanner=newScanner(System.in); String......
  • 蓝桥杯2019 估计人数
    蓝桥杯2019估计人数题目描述给定一个\(N\timesM\)的方格矩阵,矩阵中每个方格标记0或者1代表这个方格是不是有人踩过。已知一个人可能从任意方格开始,之后每一步只能向右或者向下走一格。走了若干步之后,这个人可以离开矩阵。这个人经过的方格都会被标记为1,包括开始和结......
  • 【题解 P8763】[蓝桥杯 2021 国 ABC] 异或变换
    同楼上dalao做法:#include<iostream>#include<algorithm>#include<cstdio>#include<cmath>#include<cstring>#include<string>#include<cstdlib>#include<bitset>usingnamespacestd;constintN=1e4+10......
  • 2023-11-11:用go语言,字符串哈希+二分的例题。 给定长为 n 的源串 s,以及长度为 m 的模式
    2023-11-11:用go语言,字符串哈希+二分的例题。给定长为n的源串s,以及长度为m的模式串p,要求查找源串中有多少子串与模式串匹配,s'与s匹配,当且仅当s'与s长度相同,且最多有k个位置字符不同。其中1<=n,m<=10^6,0<=k<=5。来自左程云。答案2023-11-11:go代码用灵捷3.5......
  • 2023-11-11:用go语言,字符串哈希+二分的例题。 给定长为 n 的源串 s,以及长度为 m 的模式
    2023-11-11:用go语言,字符串哈希+二分的例题。给定长为n的源串s,以及长度为m的模式串p,要求查找源串中有多少子串与模式串匹配,s'与s匹配,当且仅当s'与s长度相同,且最多有k个位置字符不同。其中1<=n,m<=10^6,0<=k<=5。来自左程云。答案2023-11-11:go代码用......
  • 【每日例题】蓝桥杯 c++ 手机尾数
    手机尾数题目30年的改革开放,给中国带来了翻天覆地的变化。2011全年中国手机产量约为11.72亿部。手机已经成为百姓的基本日用品!给手机选个好听又好记的号码可能是许多人的心愿。但号源有限,只能辅以有偿选号的方法了。这个程序的目的就是:根据给定的手机尾号(4位),按照—定的规则......
  • 【每日例题】蓝桥杯 c++ 报纸页数
    报纸页数题目本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。×星球日报和我们地球的城市早报是一样的,都是一些单独的纸张叠在一起而已。每张纸印有4版。比如,某张报纸包含的4页是:5,6,11,12,可以确定它应该是最上边的第2张报纸。我们在太空中捡到了一张×......
  • 五子棋的核心算法
    五子棋是一种受大众广泛喜爱的游戏,其规则简单,变化多端,非常富有趣味性和消遣性。这里设计和实现了一个人机对下的五子棋程序,采用了博弈树的方法,应用了剪枝和最大最小树原理进行搜索发现最好的下子位置。介绍五子棋程序的数据结构、评分规则、胜负判断方法和搜索算法过程。一、相......