当前位置: 首页 > news >正文

哈希算法--猜数字游戏

1.题目要求

输入两个位数相同的数,判断对应位置的数字是否相等,返回两个数。第一个数是数字和位置完全猜对的数字个数,第二个数是数字大小猜对但位置不对的数字个数

2.逐步编程

2.1 定义函数

def g(secret,guess):
    sec_dic={}
    gue_dic={}
    # 定义两个字典,记录每个数组中数字出现的个数

    count1=0
    # 记录完全才对的数的个数
    count2=0
    # 记录大小猜对但位置不对的个数

2.2 遍历判断

    for i in range(len(secret)):
        if secret[i]==guess[i]:
            count1+=1
            # 如果位置和大小对应相等,count1数量加1
        else:
            if secret[i] in sec_dic:
                sec_dic[secret[i]]+=1
                # 若该数字包含在字典中,计数加1
            else:
                sec_dic[secret[i]]=1
                # 否则在字典中新建此数,初始数量为1

            if guess[i] in gue_dic:
                gue_dic[guess[i]]+=1
            else:
                gue_dic[guess[i]]=1

2.3 对count2取值

对于秘密数字1123,猜测数字9111 ,count2的数字为1。为什么呢?在秘密数字中,第2个已经算作全对的数量,而第1个数字1只能和猜测数字中的两个1中的某个对应,也就是说,最终只是数字对的数量是由该数在秘密数字中和在猜测数字中更小的那一个决定。为此,只需要记录秘密数字和猜测数字中未匹配的数字和它的个数,之后看相同数字的最小数即可。

    for j in sec_dic:
        if j in gue_dic:
        # 此数在两个字典中都存在
            count2+=min(sec_dic[j],gue_dic[j])
    return str(count1)+','+str(count2)

3.完整代码

def g(secret,guess):
    sec_dic={}
    gue_dic={}
    count1=0
    count2=0
    for i in range(len(secret)):
        if secret[i]==guess[i]:
            count1+=1
        else:
            if secret[i] in sec_dic:
                sec_dic[secret[i]]+=1
            else:
                sec_dic[secret[i]]=1
            if guess[i] in gue_dic:
                gue_dic[guess[i]]+=1
            else:
                gue_dic[guess[i]]=1
    for j in sec_dic:
        if j in gue_dic:
            count2+=min(sec_dic[j],gue_dic[j])
    return str(count1)+','+str(count2)
print(g([1,2,2,2,1,1],[8,2,1,1,0,0]))

4.过程解析

def g(secret,guess):
    sec_dic={}
    gue_dic={}
    count1=0
    count2=0
    for i in range(len(secret)):
        if secret[i]==guess[i]:
            count1+=1
        else:
            if secret[i] in sec_dic:
                sec_dic[secret[i]]+=1
                print(sec_dic,'sec_dic')
            else:
                sec_dic[secret[i]]=1
                print(sec_dic,'sec_dic')
            if guess[i] in gue_dic:
                gue_dic[guess[i]]+=1
                print(gue_dic,'gue_dic')
            else:
                gue_dic[guess[i]]=1
                print(gue_dic,'gue_dic')
    for j in sec_dic:
        if j in gue_dic:
            count2+=min(sec_dic[j],gue_dic[j])
    return str(count1)+','+str(count2)
print(g([1,2,2,2,1,1],[8,2,1,1,0,0]))

# {1: 1} sec_dic
# {8: 1} gue_dic
# {1: 1, 2: 1} sec_dic
# {8: 1, 1: 1} gue_dic
# {1: 1, 2: 2} sec_dic
# {8: 1, 1: 2} gue_dic
# {1: 2, 2: 2} sec_dic
# {8: 1, 1: 2, 0: 1} gue_dic
# {1: 3, 2: 2} sec_dic        # 1的数量为3个
# {8: 1, 1: 2, 0: 2} gue_dic  # 1的数量为2个,返回最小值
# 1,2


文章转载自:

http://jN2acQbW.htqrh.cn
http://XpBywuGi.htqrh.cn
http://jAH8f1A4.htqrh.cn
http://0BM9Yi9y.htqrh.cn
http://o9k0nmZf.htqrh.cn
http://gbHakovB.htqrh.cn
http://X726AuTN.htqrh.cn
http://rnyZWcWA.htqrh.cn
http://DsI3qqFv.htqrh.cn
http://TUee0nb4.htqrh.cn
http://TVOTVF1A.htqrh.cn
http://jQCas2Ia.htqrh.cn
http://aaj7PqMO.htqrh.cn
http://L71p6Cpa.htqrh.cn
http://OJDN3se2.htqrh.cn
http://7LmBxJMX.htqrh.cn
http://cEjL3CNc.htqrh.cn
http://rsKkaAFE.htqrh.cn
http://Wgv1v4Z5.htqrh.cn
http://n2u541Ab.htqrh.cn
http://tlwiqnGx.htqrh.cn
http://XKHFRSGe.htqrh.cn
http://pGE6SumA.htqrh.cn
http://7XzXVZJb.htqrh.cn
http://1FkWLjjn.htqrh.cn
http://ULTSW9KQ.htqrh.cn
http://ygyJJmgX.htqrh.cn
http://BQBjf0t1.htqrh.cn
http://0WgJlGmr.htqrh.cn
http://2W9bOqb8.htqrh.cn
http://www.dtcms.com/a/46182.html

相关文章:

  • 基于AX58100 EtherCAT从站开发
  • 考研408数据结构线性表核心知识点与易错点详解(附真题示例与避坑指南)
  • llama-factory
  • 132. 分割回文串 II | 最少分割次数
  • Linux网络相关概念和重要知识(1)(网络协议、网络通信)
  • Hashmap
  • FPGA开发,使用Deepseek V3还是R1(8):FPGA的全流程(简略版)
  • Pytorch使用手册—Raspberry Pi 4 上的实时推理(30 FPS!)(专题三十六)
  • C++对象特性
  • Spring Boot分层架构的优势
  • 记忆化搜索(典型算法思想)—— OJ例题算法解析思路
  • SAP-ABAP:SAP的MM模块BAPI的详细介绍
  • 知识库ragflow和dify安装
  • Python Cookbook-2.22 计算目录间的相对路径
  • JS逆向-233网校sid参数和sign参数
  • EfficientViT模型详解及代码复现
  • upload
  • 线程状态与线程方法详解
  • 三支一扶入职体检不合格项目全解析
  • 算法day5 bfs搜索
  • 图像分类项目1:基于卷积神经网络的动物图像分类
  • JavaEE基础之- 过滤器和监听器Filter and Listener
  • 迷你世界脚本状态接口:Buff
  • 在.net中,async/await的理解
  • 【实战篇】【深度解析DeepSeek:从机器学习到深度学习的全场景落地指南】
  • 通往 AI 之路:Python 机器学习入门-面向对象编程
  • 数据库拓展操作
  • 阿里云 Qwen2.5-Max:超大规模 MoE 模型架构和性能评估
  • 大白话面试遇难题,应对策略是什么?
  • 微信小程序开发学习笔记