力扣:珠玑妙算(详解)

news2024/11/25 6:45:33

前言:内容包括四大模块:题目,代码实现,大致思路,代码解读

 题目:

珠玑妙算游戏(the game of master mind)的玩法如下。

计算机有4个槽,每个槽放一个球,颜色可能是红色(R)、黄色(Y)、绿色(G)或蓝色(B)。例如,计算机可能有RGGB 4种(槽1为红色,槽2、3为绿色,槽4为蓝色)。作为用户,你试图猜出颜色组合。打个比方,你可能会猜YRGB。要是猜对某个槽的颜色,则算一次“猜中”;要是只猜对颜色但槽位猜错了,则算一次“伪猜中”。注意,“猜中”不能算入“伪猜中”。

给定一种颜色组合solution和一个猜测guess,编写一个方法,返回猜中和伪猜中的次数answer,其中answer[0]为猜中的次数,answer[1]为伪猜中的次数。

示例:

输入: solution="RGBY",guess="GGRR"
输出: [1,1]
解释: 猜中1次,伪猜中1次。

代码实现:

int* masterMind(char* solution, char* guess, int* returnSize)
{
	static int arr[2] = { 0 };
	arr[0] = 0;
	arr[1] = 0;
	*returnSize = 2;
	int solu_count[26] = { 0 };
	int gues_count[26] = { 0 };
	int i = 0;
	for (i = 0; i < 4; i++)
	{
		if (solution[i] == guess[i])
		{
			arr[0] += 1;
		}
		else
		{
			solu_count[solution[i] - 'A'] += 1;
			gues_count[guess[i] - 'A'] += 1;
		}
	}
	for (i = 0; i < 26; i++)
	{
		arr[1] += solu_count[i] > gues_count[i] ? gues_count[i] : solu_count[i];
	}
	return arr;
}

大致思路:

预备了解:

solu_count数组:存放位置没有对上的颜色(在solution数组中)的出现次数

gues_count数组:存放位置没有对上的颜色(在guess数组中)的出现次数

1. 遍历solution数组和guess数组,统计相同位置上相同颜色这种情况的个数(猜中次数),存到arr[0]中

2. 若是两个数组在同一位置上颜色不同,则是统计伪猜中的个数:

    创建两个数组,一个数组用于:统计solution数组中位置没有对上的颜色字符的出现次数

                            一个数组用于:统计guess数组中位置没有对上的颜色字符的出现次数

3. 遍历solu_count数组和gues_count数组,取两个数组中某个颜色出现次数的较小值为此数字出现次数,然后加在伪猜中次数中

举例: solution="RGBY",guess="GGRR"

 

 取出现次数较小者的原因:假设有颜色R两个,但是用户只猜了有1个R,所以伪猜中次数只+1

                                             假设有颜色R1个,但是用户猜有两个R, 伪猜中次数也只+1

                                             假设有颜色全是R,但是用户全部猜颜色B,则伪猜中次数会加上较小者0,即用户一个伪猜中次数都没有

代码解读:

part 1

    static int arr[2] = { 0 };
	arr[0] = 0;
	arr[1] = 0;

由于static修饰数组arr后,不会重新初始化,故而我们需要手动将arr数组中的arr[0]和arr[1]初始化为0,消除上一次游戏留下的结果

part 2

    int solu_count[26] = { 0 };
	int gues_count[26] = { 0 };
	int i = 0;
	for (i = 0; i < 4; i++)
	{
		if (solution[i] == guess[i])
		{
			arr[0] += 1;
		}
		else
		{
			solu_count[solution[i] - 'A'] += 1;
			gues_count[guess[i] - 'A'] += 1;
		}
	}

1.创建solu_count数组统计每个颜色字符在solution数组中出现的次数

   创建gues_count 数组统计每个颜色字符在guess数组中出现的次数

数组的大小设定为26个:‘Y’的ASCII码值是89,89-'A'(即65)=24

本来25个空间就能够有下标为24的空间,但是因为还需要存储字符串的结束标志'\0',故而需要26个空间

2. 遍历solution数组和guess数组,若是碰上同一位置且颜色还一致(即同一下标下的两个数组空间的内容完全相同)则猜中次数+1,即arr[0]+=1

    若是同一位置却颜色不同,则我们要统计用户伪猜中的次数

    新下标:代表颜色的字母字符-’A‘,这样可以让每个颜色字符对应的空间是唯一的

                  同时节省空间

     a. 当前solution数组中下标为i的颜色字母,出现了,要统计它,则以它-'A’作为新下标在对应的solu_count 数组中的空间中+1

         当前guess数组中下标为i的颜色字母,出现了,要统计它,则以它-'A’作为新下标在对应的gues_count 数组中的空间中+1

     part 3

    for (i = 0; i < 26; i++)
	{
		arr[1] += solu_count[i] > gues_count[i] ? gues_count[i] : solu_count[i];
	}

      遍历solu_count数组和gues_count 数组,取两个数组中对应空间中的较小值为结果加在arr[1]

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

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

相关文章

电力系统网架规划MATLAB程序分享

网架数据展示&#xff1a;完整程序&#xff1a;close all;clear all;clc;warning off; % 去除警告 tic; % tic用来保存当前时间&#xff0c;而后使用toc来记录程序完成时间%% 基本参数T12; % 典型日 8-19h % 8-19h 负荷各时段负荷总量total_P_LOAD[828,1001,1105,1105,994,1105…

STM32CubeMX+SPI+FATFS读写SD卡

一、软件硬件说明软件&#xff1a;STM32CubeMX V6.6.1 /KEIL5 V5.29硬件&#xff1a;正点原子mini开发板&#xff0c;SD卡,通过SPI方式驱动SD卡&#xff0c;用的是SPI1接口以上内容来源于正点原子mini开发板手册&#xff0c;SD卡的详细介绍也可以去查阅这个手册。二、STM32Cube…

Ethercat系列(3)TWCat3下抓包实例分析

简介研究Ethercat协议&#xff0c;必须知道数据包格式&#xff0c;以及其真实含义。以一个真实的数据包来学习是最有效的。Twcat3下用wireshark抓包&#xff0c;需要设置一下混杂模式&#xff0c;否则不能直接抓到Ethercat数据包。Twcat抓包设置在正确加载驱动器配置文件后&…

可深度二次开发的智能插座 工业化物联网多场景的高定系统服务商

物联网时代&#xff0c;各类物联网需求越来越迫切。物联网设备呈现出爆发式增长。同时近年来国家不断出台相关的法规政策&#xff0c;为物联网行业发展创造机遇&#xff0c;三大运营商积极部署NB-IOT网络建设&#xff0c;建成90万NB-IoT基站。据统计2012-2022年期间&#xff0c…

缺省参数+函数重载+构造函数

目录 一、缺省参数 &#xff08;一&#xff09;缺省参数概念 &#xff08;二&#xff09;缺省参数分类 1. 全缺省参数 2. 半缺省参数&#xff08;缺省部分参数&#xff09; 3. 注意 二、函数重载 &#xff08;一&#xff09;基本概念 &#xff08;二&#xff09;举例 …

“算丰AI视界”人工智能技术内容征集活动正式开启!

2023年2月8日&#xff0c;首届“算丰AI视界”人工智能技术内容征集活动正式拉开帷幕&#xff01;本次活动主要征集AI、CV、TPU-MLIR、RISC-V等方向的代表性视频和文章&#xff0c;面向国内外的企业、高校和科研院所的优秀开发者。 活动紧扣人工智能行业相关AI视觉技术&#xff…

申请苹果开发者账号的方法

1、打开苹果id注册地址&#xff0c;输入相关信息注册&#xff0c;如果已经有苹果账号了看第二步&#xff0c; https://appleid.apple.com/account?localangzh_CN 2、注册成功了&#xff0c;或者有苹果账号了&#xff0c;登录苹果开发者中心 https://developer.apple.com/acc…

LearnOpenGL 笔记 - 入门 04 你好,三角形

系列文章目录 LearnOpenGL 笔记 - 入门 01 OpenGLLearnOpenGL 笔记 - 入门 02 创建窗口LearnOpenGL 笔记 - 入门 03 你好&#xff0c;窗口 文章目录系列文章目录前言你好&#xff0c;三角形顶点输入顶点着色器&#xff08;Vertex Shader&#xff09;编译着色器片段着色器&…

SpringBoot集成Flink-CDC 采集PostgreSQL变更数据发布到Kafka

一、业务价值 监听数据变化&#xff0c;进行异步通知&#xff0c;做系统内异步任务。 架构方案&#xff08;懒得写了&#xff0c;看图吧&#xff09;&#xff1a; 二、修改数据库配置 2.1、更改配置文件postgresql.conf # 更改wal日志方式为logical&#xff08;必须&#xf…

PCB设计是不是该去除孤铜

你知道PCB设计是不是该去除孤铜? PCB设计的技巧需要注意很多问题&#xff0c;各个器件的兼容问题&#xff0c;以及成品问题等等都是需要考虑的重要因素。 我们今天的主题是PCB设计的时候是不是该去除孤铜的问题?有人说应该除去&#xff0c;原因大概是&#xff1a; 会造成EMI问…

学习深入理解JVM虚拟机及JavaGuide后的学习笔记

JVM虚拟机 一、JVM组成部分&#xff1a; 1.程序计数器 作用&#xff0c;是记住下一条JVM指令的内存地址&#xff1b;1.多线程情况下&#xff0c;程序计数器用于记录当前线程执行的位置&#xff0c;从而线程切换回来的时候能够知道线程上次运行到哪儿了。2.字节码解释器通过改变…

6 前缀、中缀、后缀表达式

文章目录1 前缀表达式 1. 1 缀表达式的计算机求值 2 中缀表达式3 后缀表达式 3. 1 后缀表达式的计算机求值 3. 2 中缀表达式转换为后缀表达式1 前缀表达式 前缀表达式又称波兰式&#xff0c;前缀表达式的运算符位于操作数之前 举例说明&#xff1a; (34)5-6 对应的前缀表达式就…

Orin + SC16IS752+SP3072 SPI转串口485

文章目录 1.前言2.修改过程2.1 sc16is752 芯片2.1.1引脚说明2.1.2 设备树配置2.2.1 源码分析3 调试1.前言 Orin 有四路串口,对于多数设备来说已经够用。 通过SPI 转串口再转RS485在Orin平台应该属于极个例,所以记录一下。 串口扩展芯片: SC16IS752RS485收发器: SP3072通信…

初次尝试-注册openai并使用chatGPT

1 环境 本次我打算在win11虚拟机下进行(不打算动真机的时区啦)。 2 科学上网 这里就不多介绍了&#xff0c;使用科学上网工具连接外网即可。由于软件可连接限制&#xff0c;我这里选择美国网络。 3 更改时区 这里的时区最好和上述的所连接的地区一致。 3 登录网站 1、…

HOMER docker版本安装详细流程

概述 HOMER是一款100%开源的针对SIP/VOIP/RTC的抓包工具和监控工具。 HOMER是一款强大的、运营商级、可扩展的数据包和事件捕获系统&#xff0c;是基于HEP/EEP协议的VoIP/RTC监控应用程序&#xff0c;并可以使用即时搜索、处理和存储大量的信令、RTC事件、日志和统计信息。 …

Word控件Spire.Doc 【Table】教程(13): 如何在 C# 中向现有的 word 表添加一行

Spire.Doc for .NET是一款专门对 Word 文档进行操作的 .NET 类库。在于帮助开发人员无需安装 Microsoft Word情况下&#xff0c;轻松快捷高效地创建、编辑、转换和打印 Microsoft Word 文档。拥有近10年专业开发经验Spire系列办公文档开发工具&#xff0c;专注于创建、编辑、转…

LwIP系列--软件定时器(超时处理)详解

一、目的在TCP/IP协议栈中ARP缓存的更新、IP数据包的重组、TCP的连接超时和超时重传等都需要超时处理模块&#xff08;软件定时器&#xff09;的参与。本篇主要介绍LwIP中超时处理的实现细节。上图为超时定时器链表&#xff0c;升序排序&#xff0c;其中next_timeout为链表头&a…

pyLoad远程代码执行漏洞(CVE-2023-0297)复现以及原理流量特征分析

声明&#xff1a; 请勿用于非法入侵&#xff0c;仅供学习。传送门 -》中华人民共和国网络安全法 文章目录声明&#xff1a;pyLoad介绍漏洞介绍影响版本不受影响版本漏洞原理漏洞环境搭建以及复现流量特征分析pyLoad介绍 pyLoad是一个用 Python 编写的免费和开源下载管理器&am…

计算GPS两个点之间的距离

参考&#xff1a;Https://blog.csdn.net/u011339749/article/details/125048180任意两点对应的经纬度A(lat0,long0),B(lat1,long1)则C(lat1,long0),D(lat0,long1)。通过A、B、C、D四个点可以确定一个四边形平面。同一纬度相互平行&#xff0c;可知连接ACBD四点构成了一个等腰梯…

干货|PCB板上的丝印位号与极性符号的组装性设计

PCB板上的字符很多&#xff0c;那么字符在后期起着那些非常重要的作用呢&#xff1f;一般常见的字符:“R”代表着电阻&#xff0c;"C”代表着电容&#xff0c;“RV”表示的是可调电阻&#xff0c;“L”表示的是电感&#xff0c;“Q”表示的是三极管&#xff0c;“D”表示的…