news 2026/5/5 21:43:58

[CSP-S 2023] 密码锁

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
[CSP-S 2023] 密码锁

原题

题目描述

小 Y 有一把五个拨圈的密码锁,每个拨圈上是从 0 到 9 的数字。每个拨圈都是从 0 到 9 的循环,即 9 拨动一个位置后可以变成 0 或 8,小 Y 采用的锁车方式是:从正确密码开始,随机转动密码锁仅一次;每次都是以某个幅度仅转动一个拨圈或者同时转动两个相邻的拨圈。当小 Y 选择同时转动两个相邻拨圈时,两个拨圈转动的幅度相同,即小 Y 可以将密码锁从 00115 转成 11115,但不会转成 12115。所以小 Y 记下了自己锁车后密码锁的 n 个状态,注意这 n 个状态都不是正确密码。为了检验这么锁车的安全性,小 Y 有多少种可能的正确密码,使得每个正确密码都能够按照他所采用的锁车方式产生锁车后密码锁的全部 n 个状态。

解题思路

首先,由于密码锁只有五位,所以我们可以对正确密码可能的值进行枚举。现在就只需要判断这个密码是否合法了。

那密码怎么会合法呢?第一:与给出的n个状态不相同且不同的位数为1或2。第二:如果不同的位数为2,就进行判断:如果当前位与密码的这一位的值不相等且下一位相等,则肯定不可以。否则,如果下一位与当前位的差转化为0~9与密码的下一位与当前位的差转化为0~9不等,肯定不可以。

最后统计合法密码的数量就可以了。

#include<bits/stdc++.h> using namespace std; int a[20][10]; int n; bool check(string s){ bool bl=1; for(int i=1;i<=n;i++){ int cnt=0; for(int j=1;j<=5;j++){ if(a[i][j]!=s[j-1]-'0'){ cnt++; } } if(cnt==0||cnt>2)return 0;//如果与给定状态相同或不同的位数大于2,则返回不合法 if(cnt==1)continue; //当不同的位数为二 for(int j=1;j<5;j++){ if(s[j-1]-'0'!=a[i][j]){ if(s[j]-'0'==a[i][j+1]){ //如果当前位与密码的这一位的值不相等且下一位相等 return 0; } else if((s[j-1]-'0'+10-a[i][j])%10!=(s[j]-'0'+10-a[i][j+1])%10){ //如果下一位与当前位的差转化为0~9与密码的下一位与当前位的差转化为0~9不等 return 0; } else break; } } } return 1; } int main(){ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin>>n; if(n==1){ cout<<81; return 0; } for(int i=1;i<=n;i++){ for(int j=1;j<=5;j++){ cin>>a[i][j]; } } int cnt=0; for(int i=100000;i<=199999;i++){//枚举正确的密码 int t=i; string s; while(t){ s=char(t%10+'0')+s; t/=10; } s.erase(s.begin());//第一位不用管!! if(check(s)){ cnt++;//密码合法。就统计 } } cout<<cnt; return 0; }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/4 11:55:13

30、编程中的任务分解与流程控制

编程中的任务分解与流程控制 1. 自上而下的设计方法 在处理复杂任务时,自上而下的设计方法是一种非常有效的策略。以停车这个任务为例,它可以进一步细分为以下步骤: 1. 寻找停车位。 2. 将车驶入停车位。 3. 关闭发动机。 4. 拉起手刹。 5. 下车。 6. 锁车。 而“关…

作者头像 李华
网站建设 2026/5/4 7:36:43

31、深入探索Bash脚本:条件判断、输入读取与逻辑操作

深入探索Bash脚本:条件判断、输入读取与逻辑操作 1. 脚本退出状态与函数返回值 在Bash脚本中, exit 命令可设置脚本的退出状态。当不带参数时,默认退出状态为 0;若 $FILE 扩展为不存在的文件名,可使用 exit 命令表明脚本执行失败。示例如下: if [ ! -e "$…

作者头像 李华
网站建设 2026/5/5 6:06:44

34、编程中的流程控制与位置参数使用

编程中的流程控制与位置参数使用 1. 流程控制:使用 case 进行分支操作 在编程中,流程控制是非常重要的一部分。之前我们可能会使用一系列的 if 命令来处理用户的选择,不过很多编程语言(包括 shell)都提供了更简洁的多选择决策流程控制机制,在 shell 中就是 case 命…

作者头像 李华
网站建设 2026/5/4 23:15:13

38、Linux 命令行:深入探索与实践

Linux 命令行:深入探索与实践 1. 客户端/服务器架构与命名管道概述 客户端/服务器架构是一种常见的编程架构,它可以利用诸如命名管道之类的通信方法,以及网络连接等其他进程间通信方式。其中,最广泛使用的客户端/服务器系统类型是 Web 浏览器与 Web 服务器之间的通信。在这…

作者头像 李华
网站建设 2026/5/4 14:03:36

企业级大模型开发及应用 - 通用大模型与行业大模型

目录大模型商业模式架构通用大模型什么是通用大模型通用大模型的构建行业大模型什么是行业大模型行业大模型的构建企业专属大模型什么是专属大模型专属大模型的构建大模型商业模式架构 从商业模式看&#xff0c;大模型已形成“基础 - 行业 - 应用”三层架构&#xff0c;三层服…

作者头像 李华
网站建设 2026/4/30 23:14:47

企业级大模型开发及应用 - 企业应用大模型的方法

目录基座大模型的选择选择基座大模型的考量因素典型的通用大模型企业应用大模型的方法大模型 插件大模型 知识库大模型 Agent构建企业专属大模型基座大模型的选择 选择基座大模型的考量因素 大模型的性能 首先评估通用大模型在各种自然语言处理任务上的性能选择性能优异的…

作者头像 李华