news 2026/4/28 9:55:32

[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/4/26 21:06:15

35、深入掌握Shell脚本:for循环、字符串与数字操作全解析

深入掌握Shell脚本:for循环、字符串与数字操作全解析 1. for循环控制流 在Shell脚本编程中, for 循环是一种强大的控制结构,与 while 和 until 循环不同,它提供了在循环中处理序列的方法,在编程中非常实用,是Bash脚本中常用的结构。在现代Bash版本中, for 循环…

作者头像 李华
网站建设 2026/4/27 4:54:41

【JavaWeb】HttpServletRequest_获取请求行和请求头

目录HttpServletRequest简介常见API测试请求行相关请求头相关HttpServletRequest简介 HttpServletRequest是什么? HttpServletRequest是一个接口&#xff0c;其父接口是ServletRequestHttpServletRequest是Tomcat将请求报文转换封装而来的对象&#xff0c;在Tomcat调用servi…

作者头像 李华
网站建设 2026/4/24 19:29:14

29、Linux 系统软件包管理全解析

Linux 系统软件包管理全解析 1. 软件包管理概述 在 Linux 系统中,软件的获取和管理方式与其他操作系统有所不同。为了安装必要的应用程序并保持其更新,我们需要掌握软件包的获取和管理方法。由于打包的软件通常通过网络(如互联网)分发,在配置好 Linux 系统的网络后,软件…

作者头像 李华
网站建设 2026/4/16 21:30:52

好写作AI格式革命:一键跨越从“草稿”到“期刊”的最后鸿沟

当你终于改完论文最后一稿&#xff0c;却发现自己要面对17种不同的格式要求、89条引用规范和无数个“这个到底用逗号还是分号”的灵魂拷问时——别担心&#xff0c;好写作AI的格式化引擎已准备就绪。 据统计&#xff0c;格式调整平均占用研究者论文总耗时的18%&#xff0c;而因…

作者头像 李华
网站建设 2026/4/17 16:01:52

MudBlazor文本字段内边距异常终结指南:从混乱布局到完美对齐

MudBlazor文本字段内边距异常终结指南&#xff1a;从混乱布局到完美对齐 【免费下载链接】MudBlazor Blazor Component Library based on Material design with an emphasis on ease of use. Mainly written in C# with Javascript kept to a bare minimum it empowers .NET de…

作者头像 李华
网站建设 2026/4/27 16:38:04

GLM-4.6大模型完整指南:200K上下文+智能体工具调用终极方案

GLM-4.6大模型完整指南&#xff1a;200K上下文智能体工具调用终极方案 【免费下载链接】GLM-4.6 GLM-4.6在GLM-4.5基础上全面升级&#xff1a;200K超长上下文窗口支持复杂任务&#xff0c;代码性能大幅提升&#xff0c;前端页面生成更优。推理能力增强且支持工具调用&#xff0…

作者头像 李华