【算法】五子连线

news2024/12/23 4:22:43

题目描述

五子棋是世界智力运动会竞技项目之一,是一种两人对弈的纯策略型棋类游戏,通常双方分别使用黑白两色的棋子,下在棋盘直线与横线的交叉点上,先形成连续的五子连线(横、竖、斜)者获胜。

棋盘一般为15X15的,横向为A~O,纵向为1~15,从棋盘的左下角开始标记,如下图所示。例如,图示中上面的5个棋子可标记为G13、H13、I13、J13、K13,正好形成横向五子连线的情况;图示中右方的5个棋子可标记为I10、J9、K8、L7、M6,正好形成斜向五子连线的情况;图示中左下方的5个棋子可标记为H7、F5、E4、D3、C2,未能形成五子连线的情况。

现给出5个棋子的位置,请判断这5个棋子有没有形成五子连线的情况?

输入

第一行输入一个整数n(1≤n≤200),代表有n组测试数据。

接下来有n行数据,每行一组数据,每组数据包括5个棋子的位置。

输出

如果5个棋子可以形成五子连线的情况(横向、竖向、斜向),输出Yes,否则输出No。

每个输出占一行。

样例输入

3
G13 K13 J13 I13 H13
I10 J9 M6 L7 K8
H7 E4 F5 D3 C2

样例输出

Yes
Yes
No

算法思路

输入

考虑到有多组复杂的数据,所以选择采用结构体的数据结构。读取的时候我们将横坐标(字母)和纵坐标(数字)分别读取并存放到结构体下的两个数组alp和dig中。

五子连线的判定

拿到了坐标,判定是否连成五子只需要分三大类讨论

  • 字母连续的情况
  • 字母相等的情况
  • 其他情况

在字母连续的情况下需要分两小类

  • 数字相等 或 数字字母(横纵坐标)差相等 或 数字字母(横纵坐标)和相等
  • 其他情况

在字母相等的情况下也需要分两小类 

  • 数字连续
  • 数字不连续

坐标连续的判定

按照上述思路我们在讨论的时候要对数字和字母的连续性进行判定,这时候采用排序是很好的办法,通过<stdlib.h>中的qsort函数可以帮助我们省掉一些麻烦。因为只有5个坐标,采用硬核一点的办法直接判定五个是不是连续就行了。

小心坑

  • 输入的时候每读完一个坐标要用一个getchar()清空缓冲区,否则会得到不期望的结果
  • 要先计算横纵坐标差再给数组排序,因为排序之后横纵坐标就不再在同一索引对应

代码

以上只是我个人的思路,并不代表着最优解,代码仅供参考。

#include <stdio.h>
#include <stdlib.h>
struct chess{
    char alp[5];
    int dig[5];
};
int as_int(const void* e1, const void* e2) {
    return *(int*)e1 - *(int*)e2;
}
int as_char(const void* e1, const void* e2) {
    return (*(char*)e1) - (*(char*)e2);
}
int main(){
    int n;
    scanf("%d",&n);
    getchar();
    struct chess groups[n];
    for(int i=0;i<n;i++){
        for(int j=0;j<5;j++){
            scanf("%c%d",&groups[i].alp[j],&groups[i].dig[j]);
            getchar();
        }
    }
    for(int i=0;i<n;i++){
        int a1,a2,a3,a4,a5,d1,d2,d3,d4,d5;
        a1=groups[i].dig[0]+groups[i].alp[0];
        a2=groups[i].dig[1]+groups[i].alp[1];
        a3=groups[i].dig[2]+groups[i].alp[2];
        a4=groups[i].dig[3]+groups[i].alp[3];
        a5=groups[i].dig[4]+groups[i].alp[4];
        d1=groups[i].dig[0]-groups[i].alp[0];
        d2=groups[i].dig[1]-groups[i].alp[1];
        d3=groups[i].dig[2]-groups[i].alp[2];
        d4=groups[i].dig[3]-groups[i].alp[3];
        d5=groups[i].dig[4]-groups[i].alp[4];
        qsort(groups[i].dig, 5, sizeof(int), as_int);
        qsort(groups[i].alp, 5, sizeof(char), as_char);
        if(groups[i].alp[0]+1==groups[i].alp[1]&&groups[i].alp[1]+1==groups[i].alp[2]&&groups[i].alp[2]+1==groups[i].alp[3]&&groups[i].alp[3]+1==groups[i].alp[4]){
            if((groups[i].dig[0]==groups[i].dig[1]&&groups[i].dig[0]==groups[i].dig[2]&&groups[i].dig[0]==groups[i].dig[3]&&groups[i].dig[0]==groups[i].dig[4])||(a1==a2&&a2==a3&&a3==a4&&a4==a5)||(d1==d2&&d2==d3&&d3==d4&&d4==d5)){
                printf("Yes\n");
            }
            else{
                printf("No\n");
            }
        }
        else if(groups[i].alp[0]==groups[i].alp[1]&&groups[i].alp[0]==groups[i].alp[2]&&groups[i].alp[0]==groups[i].alp[3]&&groups[i].alp[0]==groups[i].alp[4]){
            if(groups[i].dig[0]+1==groups[i].dig[1]&&groups[i].dig[1]+1==groups[i].dig[2]&&groups[i].dig[2]+1==groups[i].dig[3]&&groups[i].dig[3]+1==groups[i].dig[4]){
                printf("Yes\n");
            }            
            else{
            printf("No\n");
            }
        }
        else{
            printf("No\n");
        }
    }
    return 0;
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1622282.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

电脑回收站的东西还原后会在哪里?一文给你答案!

“很奇怪&#xff0c;想问问大家&#xff0c;我电脑回收站里还原的文件会被保存在哪里呀&#xff1f;刚刚恢复文件的时候本来想直接将它拖出&#xff0c;却发现文件不见了&#xff0c;这种情况应该怎么解决呢&#xff1f;” 电脑回收站是一个特殊的文件夹&#xff0c;用于临时存…

解决IDEA中Tomcat控制台乱码问题(包括sout输出乱码)

文章目录 前言一、控制台直接输出乱码二、sout输出内容在控制台显示乱码 前言 今天在使用Tomcat的时候发现控制台输入出现了乱码问题&#xff0c;其实之前就出现过一次&#xff0c;解决了&#xff0c;但是新创建一个项目后又会出现sout的内容在控制台输出的乱码问题&#xff0…

【漏洞复现】云时空社会化商业ERP系统LoginName SQL注入漏洞

漏洞描述&#xff1a; 云时空社会化商业ERP系统loginName存在SQL注入漏洞&#xff0c;攻击者可以通过此漏洞获取数据库敏感信息。 搜索语法: Fofa-Query: app"云时空社会化商业ERP系统" 漏洞详情&#xff1a; 1.云时空社会化商业ERP系统。 2.漏洞POC&#xff1a…

redis中的双写一致性问题

双写一致性问题 1.先删除缓存或者先修改数据库都可能出现脏数据。 2.删除两次缓存&#xff0c;可以在一定程度上降低脏数据的出现。 3.延时是因为数据库一般采用主从分离&#xff0c;读写分离。延迟一会是让主节点把数据同步到从节点。 1.读写锁保证数据的强一致性 因为一般放…

svg图标填充渐变色及CSS鼠标悬停纯色渐变色转换

svg图标填充渐变色及CSS鼠标悬停纯色渐变色转换&#xff1a; HTML&#xff1a; <!--底部导航--> <ul class"milliaNav"> <li class"active"><a href"#"> <svg class"icon" viewBox"0 0 1024 1024&qu…

06.JAVAEE之线程4

1.定时器 1.1 定时器是什么 定时器也是软件开发中的一个重要组件. 类似于一个 " 闹钟 ". 达到一个设定的时间之后 , 就执行某个指定好的代码. 约定一个时间,时间到达之后,执行某个代码逻辑, 定时器非常常见,尤其是在进行网络通信的时候, 需要有等待的最大时间&…

xilinx Mailbox 中的ipi message地址计算方式

适用于openAmp mailbox ipi id对应的ipi message地址计算方式 官方openamp硬件配置解析 OpenAMP Base Hardware Configurations - Xilinx Wiki - Confluence openamp官方设备树 meta-openamp/meta-xilinx-tools/recipes-bsp/device-tree/files/zynqmp-openamp.dtsi at rel-v2…

政安晨:【Keras机器学习示例演绎】(十四)—— 用于弱光图像增强的零 DCE

目录 简介 下载 LOL 数据集 创建 TensorFlow 数据集 零 DCE 框架 了解光线增强曲线 DCE-Net 损失函数 色彩恒定损失 曝光损失 光照平滑度损失 空间一致性损失 深度曲线估计模型 训练 推论 测试图像推理 政安晨的个人主页&#xff1a;政安晨 欢迎 &#x1f44d;点…

遥感卫星影像地表温度反演

近年来&#xff0c;随着遥感技术的不断发展和卫星遥感数据的广泛应用&#xff0c;遥感卫星地表温度反演成为了地球科学和环境监测领域的重要研究内容。地表温度反演是指利用遥感卫星数据推算地表温度的过程&#xff0c;其原理基于地物表面的辐射特征与温度之间的关系。本文将介…

Github2024-04-25 开源项目日报Top10

根据Github Trendings的统计,今日(2024-04-25统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目4非开发语言项目2TypeScript项目2PowerShell项目1C++项目1Dart项目1JavaScript项目1GPT4All: 在边缘运行开源大型语言模型 创建周期:…

C++:拷贝构造函数的初始化列表

拷贝构造函数的初始化列表是在拷贝构造函数的定义中出现的一组初始值&#xff0c;用于初始化新创建的对象的成员变量。它的语法是在构造函数的声明后面使用冒号&#xff08;:&#xff09;来开头&#xff0c;然后列出要初始化的成员变量和它们的初始值。初始化列表的优点在于它允…

从国内盲盒小程序看国外市场的发展机遇与挑战

近年来&#xff0c;盲盒小程序在国内市场迅速崛起&#xff0c;凭借其独特的营销模式和消费者体验&#xff0c;赢得了大量年轻消费者的喜爱。从国内盲盒小程序的发展中&#xff0c;我们可以窥见国外市场的一些发展机遇与挑战&#xff0c;为进军国际市场提供有益的参考。 首先&a…

[Swift]单元测试

编写单元测试是确保你的代码质量和功能正确性的重要步骤 一、编写单元测试的详细流程 1. 创建一个新的Xcode项目 如果你尚未创建一个项目&#xff0c;首先你需要在Xcode中创建一个新的iOS项目&#xff1a; 打开Xcode&#xff0c;选择“File” > “New” > “Project”…

ARM DMIPS算力说明

ARM DMIPS算力说明 ARM算力参考官网地址 https://en.wikipedia.org/wiki/List_of_ARM_processors Product familyARM architectureProcessorFeatureCache (I / D), MMUTypical MIPS MHzReferenceARM1ARMv1ARM1First implementationNoneARM2ARMv2ARM2ARMv2 added the MUL (mu…

一文带你了解MySQL的DCL语句

文章目录 ☃️DCL☃️管理用户☃️权限控制☃️DCL的重要性 欢迎来到 请回答1024 的博客 &#x1f34e;&#x1f34e;&#x1f34e;欢迎来到 请回答1024的博客 关于博主&#xff1a; 我是 请回答1024&#xff0c;一个追求数学与计算的边界、时间与空间的平衡&#xff0c;0与1的…

【MySQL】A01、性能优化-结构设计与配置

1、数据库设计原则 1.1、核心原则 不在数据库做运算; cpu计算务必移至业务层; 控制列数量(字段少而精,字段数建议在20以内); 平衡范式与冗余(效率优先&#xff1b;往往牺牲范式) 拒绝3B(拒绝大sql语句&#xff1a;big sql、拒绝大事务&#xff1a;big transaction、拒绝大…

【漏洞复现】Palo Alto Networks PAN-OS GlobalProtect 命令注入漏洞 CVE-2024-3400

漏洞描述 Palo Alto Networks PAN-OS GlobalProtect 命令 Palo Alto Networks PAN-OS GlobalProtect 是Palo Alto Networks 的一款防火墙产品。2024年4月12日,官方披露CVE-2024-3400 Palo Alto Networks GlobalProtect 命令注入漏洞。在特定PAN-OS版本和不同功能配置下,未经…

618哪些好物值得入手?收下这份必买清单!

很快618就要来啦&#xff0c;在这之前一定要好好做攻略。在这个特别的时刻&#xff0c;我们不仅有机会淘到心仪已久的商品&#xff0c;还能享受到超值的折扣和优惠。为了让大家的购物体验更加愉快&#xff0c;我特意整理了一份618必买清单&#xff0c;里面汇聚了各类热门好物&a…

【算法入门-Python】02_递归

一、递归 递归的两个特点&#xff1a;调用自身&#xff1b;结束条件。 def func1(x):print(x)func1(x-1)没有结束条件&#xff0c;si递归。不是递归。 def func2(x)&#xff1a;if x > 0:print(x)func2(x1)递归调用的x1&#xff0c;没有结束条件。不是递归 def func3(x)…

2024最新版本FL Studio21水果编曲软件破解版激活许可证

FL Studio 21水果编曲软件适合广泛的人群使用&#xff0c;包括但不限于以下几类人&#xff1a; 音乐制作人&#xff1a;对于专业的音乐制作人来说&#xff0c;FL Studio 21提供了全面的音乐制作工具和功能&#xff0c;能够满足他们在音乐创作、编曲、混音等方面的需求。他们可以…