【寒假每日一题】洛谷 P1838 三子棋I

news2024/10/6 1:46:47

题目链接:P1838 三子棋I - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

题目描述

小a和uim喜欢互相切磋三子棋。三子棋大家都玩过是吗?就是在九宫格里面OOXX(别想歪了),谁连成3个就赢了。

由于小a比较愚蠢,uim总是让他先。

我们用9个数字表示棋盘位置:

123
456
789
所有的棋谱都是已经结束的棋局,要么一方获胜,要么平局。

今天,他们下了一下午的棋,小a为了提高技术,录下了很多棋谱。他想知道,一盘棋结束时,到底是谁赢。

输入格式

一行,一串数字,表示落子的地点。小a总是先下。

输出格式

一行,如果小a赢,输出“xiaoa wins.”。如果uim赢,输出“uim wins.”。如果平局,输出“drew.”。

样例 #1

样例输入 #1

5237649

样例输出 #1

xiaoa wins.

样例 #2

样例输入 #2

539128647

样例输出 #2

drew.

解题思路

用 3×3 二维数组模拟棋盘,为了能够更加方便快捷地求出数字对应的数组横纵坐标,因此将棋盘中数字编号为0~8,数组横纵下标为0~2。

假设数字为x,则 x / 3 就是数字x在数组当中所对应的横坐标,x % 3 就是数字x在数组当中所对应的纵坐标。

数组下标及棋盘数字对应位置如下图所示:

AC code:

#include<iostream>
#include<algorithm>

using namespace std;

int a[3][3];

bool check(int x , int y , int c , int m)
{
	// 判断行或列 
	bool flag = 1;
	for(int i = 0 ; i < 3 ; i ++) // 列 
		if(a[i][y] != m)
			flag = 0;
	if(flag == 1)
		return true;

	flag = 1;
	for(int i = 0 ; i < 3 ; i ++) // 行 
		if(a[x][i] != m)
			flag = 0;
	if(flag == 1)
		return true;
	
	// 判断对角线 
	if(c == 0 || c == 2 || c == 4 || c == 6 || c == 8)
	{
		// 主对角线 
		flag = 1;
		for(int i = 0 ; i < 3 ; i ++)
			for(int j = 0 ; j < 3 ; j ++)
				if(i == j && a[i][j] != m)
					flag = 0;
		if(flag == 1)
			return true;
		
		// 次对角线 
		flag = 1;
		for(int i = 0 ; i < 3 ; i ++)
			for(int j = 2 ; j >= 0 ; j --)
				if(i + j == 2 && a[i][j] != m)
					flag = 0;
		if(flag == 1)
			return true;
	}
	return false;
}

int main()
{
	string s;
	cin>>s;
	
	for(int i = 0 , x ; i < 9 ; i ++)
	{
		x = s[i] - '0' - 1;
		if(i % 2 == 0)
		{
			a[x / 3][x % 3] = 1; // xiaoa下 
			if(check(x / 3 , x % 3 , x , 1))
			{
				cout<<"xiaoa wins.";
				return 0;
			}
		}
		else
		{
			a[x / 3][x % 3] = 2; // uim下 
			if(check(x / 3 , x % 3 , x , 2))
			{
				cout<<"uim wins.";
				return 0;
			}
		}
	}
	cout<<"drew.";
	
	return 0;
} 

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

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

相关文章

《信号与系统实验》实验 3:信号时域抽样和恢复

文章目录 实验内容实验1:抽样定理验证实验f(t)间隔0.5s间隔1s间隔2s验证抽样定理实验2:信号恢复实验间隔0.5s间隔1s间隔2s抽样间隔对于信号恢复过程的影响DAC一阶保持器总结实验内容 实验1:抽样定

HTTPS协议的原理 --- RSA密钥协商算法

目录 一、TLS握手过程 二、RSA密钥协商握手过程 TLS第一次握手 TLS第二次握手 TLS第三次握手 TLS第四次握手 数字证书和CA机构 数字证书签发和验证流程 三、RSA 算法的缺陷 DH 密钥协商算法 一、TLS握手过程 上图简要概述来 TLS 的握手过程&#xff0c;其中每一个「框…

Morris遍历

1、引入 二叉树的遍历 递归实现的方式&#xff1a; public static class Node {public int value;Node left;Node right;public Node(int data) {this.value data;} }//每个节点都是被有限次访问&#xff0c;时间复杂度O(N)&#xff0c;因为每次递归都要存储返回信息&#…

hadoop 集群搭建(详细版)

hadoop 集群搭建更改主机名映射设置免密同步时间创建工作目录下载jdk安装配置Hadoop修改配置文件向其他节点分发配置完成的程序为Hadoop添加环境变量启动集群初始化启动集群web页面web页面:[hdfsweb页面](http://192.168.88.128:9870/)web页面:[yarnweb页面](http://192.168.88…

3.0、Linux-常用目录、文件基本命令

3.0、Linux-常用目录、文件基本命令 命令&#xff1a;ls&#xff08;列出目录&#xff09; ls 命令在 Linux 中是常常被使用到的&#xff0c;因为 Linux 不像 Windows有可视化的界面&#xff1b; -a 参数&#xff1a;all &#xff0c;查看全部的文件&#xff0c;包括隐藏文件&…

【免杀前置课——Windows编程】二十三、内存管理—堆内存管理、虚拟内存管理、文件映射、共享内存、不依靠临界区限制文件多开、DLL注入

内存管理—堆文件映射***文件映射的概念:***共享内存文件多开限制新思路DLL注入远程线程注入远程线程注入.exetest.dll文件映射 文件映射的概念: 文件映射(Mapping&#xff09;是一种将文件内容映射到进程虚拟内存的技术。 映射成功的文件可以用视图,来引用这段内存,从而达到…

中科易安联网智能门锁2022年度总结

时光如梭&#xff0c;步履不辍。在这繁忙而又充实的一年&#xff0c;中科易安从提升服务、优化产品、扩展市场的维度发力&#xff0c;通过扎实的努力、不懈的勤勉&#xff0c;圆满地完成了2022年的工作。接下来&#xff0c;中科易安将为媒体、友商、用户朋友们呈现中科易安2022…

通过Lambda表达式 简单体验一下java方法引用

观看本文前 您需要先掌握 Lambda表达式 如果您之前没有接触过 可以先查看我的文章 java Lambda概念 通过实现线程简单体验一下Lambda表达式 java Lambda表达式的标准格式及其前提带有(代码演示) 然后 我们用 Lambda表达式 写在里面的其实就是一种解决方案 拿参数做操作 那么 …

Qss文件设置Qt界面风格

需要协商才能修改软件界面的风格&#xff0c;所以要留出通用的接口&#xff0c;于是选择使用QSS文件设置软件风格。 一、创建Qss文件 直接创建以.qss为后缀的文件 二、Qt使用Qss文件有两种办法 1、第一种办法&#xff0c;添加资源文件.qrc&#xff0c;然后在qrc文件中添加qss文…

【云边有个小卖部】

童年就像童话&#xff0c;这是他们在童话里第一次相遇。 那么热的夏天&#xff0c;少年的后背被女孩的悲伤烫出一个洞&#xff0c;一直贯穿到心脏。 刘十三被欺负得最惨&#xff0c;却想保护凶巴巴的程霜。 每当她笑的时候&#xff0c;就让他想起夏天灌木丛里的萤火虫&#xff…

Tic-Tac-Toe有多少种不同棋局和盘面状态(python实现)

目录 1. 前言 2. 如何去重&#xff1f; 3. 代码实现 3.1 对称等价判断 3.2 find_neighbor()改造 3.3 主程序及运行结果 4. 延申思考 1. 前言 在前两篇博客中实现了遍历搜索所有的Tic-Tac-Toe的棋局的python程序实现。 Tic-Tac-Toe可能棋局搜索的实现&#xff08;python…

【Java寒假打卡】Java基础-多态

【Java寒假打卡】Java基础-多态概述多态中成员访问的特点多态的好处和弊端多态中转型多态中转型存在的风险概述 同一个对象在不同时刻表现出来的不同形态 多态的前提和体现 有继承/实现关系有方法重写。子类对父类进行方法重写有父类引用指向子类对象 package com.hfut.edu.…

【阶段二】Python数据分析NumPy工具使用02篇:数组的基本属性与数组的数据获取

本篇的思维导图: 数组的基本属性 NumPy数组的基本属性主要包括数组的形状、大小、类型和维数。 描述 代码 结果

Zookeeper详解(一)——基础介绍

概念 zookeeper官网&#xff1a;https://zookeeper.apache.org/ 大数据生态系统里的很多组件的命名都是某种动物或者昆虫&#xff0c;比如hadoop就是 &#x1f418;&#xff0c;hive就是&#x1f41d;。zookeeper即动物园管理者&#xff0c;顾名思义就是管理大数据生态系统各…

Linux 系统调用的本质

简单概念 fd #include <unistd.h> #include <string.h>int main(int argc,char* argv[]) {char buf[20]{0};read(0,buf,15);write(1,buf,strlen(buf));return 0; }如果想查看某个系统编程的接口&#xff0c;比如想查看 open 函数的用法&#xff0c;可以这样操作…

Python调用C++代码用法——Linux

目录 前言 C/C动态共享库编译 ctype模块 ctype数据类型 使用案例 float数据 指针 结构体及结构体指针 numpy图像当作指针传入 参考资料&#xff1a; 前言 在项目开发中&#xff0c;有时会使用到多种编程语言&#xff0c;比如部分功能是C/C代码实现的&#xff0c;而另一…

《机器学习与应用》实验二:BP神经网络实验

文章目录 一、实验目的二、实验原理BP算法的数学描述三、程序四、实验结论一、实验目的 1、 熟悉MATLAB中神经网络工具箱的使用方法; 2、 通过在MATLAB下面编程实现BP网络逼近标准正弦函数,来加深对BP网络的了解和认识,理解信号的正向传播和误差的反向传递过程。 二、实验…

SAP MM物料与客户主数据的税分类

一&#xff0e;说明 在物料主数据、客户主数据中均有税分类的维护&#xff0c;税分类既不是税码也不代表税率&#xff0c;它们的作用是通过税务条件记录确定税码。所有的税分类在主数据中都是与国家相关的无组织机构数据&#xff0c;例如物料的销售组织有中国&#xff08;ZH&am…

智慧WMS立体仓库管理系统源码 基于springboot框架(已经测试完整带部署搭建教程)源码分享!

淘源码&#xff1a;国内知名的高品质源码免费下载平台 分享一套智慧WMS立体仓库管理系统源码&#xff0c;基于springboot框架 已经测试完整带部署搭建教程。&#xff08;MF00767&#xff09; 需要源码学习可私信我获取。 技术架构 技术框架&#xff1a;SpringBoot layui H…