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

C++密码锁 2023年CSP-S认证真题 CCF信息学奥赛C++ 中小学提高组 第二轮真题解析

C++密码锁

博主推荐

  • 所有考级比赛学习相关资料合集【推荐收藏】

1、C++专栏 

  1. 电子学会C++一级历年真题解析
  2. 电子学会C++二级历年真题解析
  3. 蓝桥杯C++选拔赛真题解析
  4. 信息素养大赛C++算法编程挑战赛

 2、Python专栏

  1. 蓝桥杯python选拔赛真题详解
  2. 蓝桥杯python省赛真题详解
  3. 蓝桥杯python国赛真题详解
  4. 信息素养大赛python编程挑战赛
  5. python等级一级真题解析【电子学会】
  6. python等级二级真题解析【电子学会】
  7. python等级三级真题解析【电子学会】

一、题目要求

1、编程实现

小 Y 有一把五个拨圈的密码锁。如图所示,每个拨圈上是从 0 到 9 的数字。每个拨圈都是从 0 到 9 的循环,即 9 拨动一个位置后可以变成 0 或 8,

因为校园里比较安全,小 Y 采用的锁车方式是:从正确密码开始,随机转动密码锁仅一次;每次都是以某个幅度仅转动一个拨圈或者同时转动两个相邻的拨圈。

当小 Y 选择同时转动两个相邻拨圈时,两个拨圈转动的幅度相同,即小 Y 可以将密码锁从 00115 转成 11115,但不会转成 12115。

时间久了,小 Y 也担心这么锁车的安全性,所以小 Y 记下了自己锁车后密码锁的 n 个状态,注意这 n 个状态都不是正确密码。

为了检验这么锁车的安全性,小 Y 有多少种可能的正确密码,使得每个正确密码都能够按照他所采用的锁车方式产生锁车后密码锁的全部 n 个状态。

2、输入输出

输入描述:

输入的第一行包含一个正整数 n,表示锁车后密码锁的状态数。

接下来 n 行每行包含五个整数,表示一个密码锁的状态。

输出描述:输出一行包含一个整数,表示密码锁的这 n 个状态按照给定的锁车方式能对应多少种正确密码。

输入样例:

1
0 0 1 1 5

输出样例:

81

样例说明:

一共有 81 种可能的方案。

其中转动一个拨圈的方案有 45 种,转动两个拨圈的方案有 36 种。

二、算法分析

  1. 从给定题目的初步分析可以看出,本题要求的是密码锁的正确方案数
  2. 策略:其实实现的方式有很多种,最简单的可以使用枚举算法,也可以使用逆向思维排除法,数学组合容次原理,多模式字符串匹配等也就是常说的AC自动机
  3. 这里采用模拟+差分数组的方式进行实现,因为数据量不是很大就5个密码,最大也就是10的5次方;然后对差分数组的值进行判断,差分数组的值不相同的时候,说明拨动的位置不同,统计个数加1;
  4. 同时如果统计个数超过2个,说明拨动了2个以上的密码,不符合;如果个数等于2的时候要判断拨动的两个密码是不是相邻的,同样不符合
#include "bits/stdc++.h"
using namespace std;
const int N = 10;
int n, a[N][N], res = 0;
int b[N], c[N];	//b数组密码锁每个位置上对应的数字,c数组是差分数组,每个位置上密码锁和给定值的差值
bool check() {for(int i=1; i<=n; i++) {for(int j=1; j<=5; j++) {c[j] = (b[j]-a[i][j]+10) % 10;}if(c[1]==0 && c[2]==0 && c[3]==0 && c[4]==0 && c[5]==0) return false;  // 两个密码相等int cnt = 0;  // 两个密码对应位置不相等的个数for(int j=1; j<=5; j++) {if(c[j] == 0) continue;cnt++;if(cnt >= 3) return false;  // 大于等于3,转一次肯定无法得到a[i],因此直接返回falseif(cnt == 2) {if(c[j-1] != c[j]) return false;  // 两个不一样,但是这两个没有相连,也不行,返回false}}}return true;
}int main() {cin >> n;for(int i=1; i<=n; i++) {for(int j=1; j<=5; j++) {cin >> a[i][j];}}for(int i=0; i<10; i++) {b[1] = i;for(int j=0; j<10; j++) {b[2] = j;for(int k=0; k<10; k++) {b[3] = k;for(int l=0; l<10; l++) {b[4] = l;for(int m=0; m<10; m++) {b[5] = m;if(check()) res++;}}}}}cout << res << endl;return 0;
}

本文作者:小兔子编程 作者首页:小兔子编程-CSDN博客

四、运行结果

8
2 3 2 3 2 3 1 27

五、考点分析

难度级别:一般,这题相对而言在于最小花费,具体主要考察如下:

  1. 分析题目,找到解题思路
  2. 掌握模拟算法的原理和使用方法
  3. 学会差分数组的原理和使用
  4. 能够正确分析出密码锁的拨动符合条件的情况
  5. 学会数学建模能力以及数学运算与逻辑处理能力
  6. 学会循环语句的熟练使用和分支语句的的控制处理(for、if)
  7. 学会调试和校对程序设计与逻辑的完整性
  8. 学会分析题目,算法分析,将复杂问题模块化,简单化,从中找到相应的解题思路
  9. 充分掌握数组定义和使用、分支语句、循环语句、差分数组和模拟算法的应用

PS:方式方法有多种,小朋友们只要能够达到题目要求即可!


文章转载自:

http://PxlPWMHN.ncLps.cn
http://IKkV91LN.ncLps.cn
http://lN8cVHaj.ncLps.cn
http://YLVds0gY.ncLps.cn
http://a1XBPbcB.ncLps.cn
http://RTyv1YIu.ncLps.cn
http://aDXgmzg6.ncLps.cn
http://ih7vGfiB.ncLps.cn
http://ga1T8TNb.ncLps.cn
http://jjYLNs35.ncLps.cn
http://BKL9XqRP.ncLps.cn
http://R2GCGHUy.ncLps.cn
http://gxfeOVE2.ncLps.cn
http://AdsmuSH4.ncLps.cn
http://iCspe1E6.ncLps.cn
http://dTmCfULO.ncLps.cn
http://avJr5wAI.ncLps.cn
http://Rj8jCqkO.ncLps.cn
http://NGhecX6q.ncLps.cn
http://7akSnakt.ncLps.cn
http://rmTcmKu3.ncLps.cn
http://yc5wmvix.ncLps.cn
http://ibD4UM3w.ncLps.cn
http://MmmVLIk5.ncLps.cn
http://YG9kwy2m.ncLps.cn
http://F6U52h8a.ncLps.cn
http://Uh6CBHjY.ncLps.cn
http://1dt41ZP0.ncLps.cn
http://NmliPlc7.ncLps.cn
http://R87wUAl4.ncLps.cn
http://www.dtcms.com/a/382829.html

相关文章:

  • Vue3 视频播放器完整指南 – @videojs-player/vue 从入门到精通
  • 零售企业数字化转型的道、法、术:基于开源AI大模型AI智能名片S2B2C商城小程序的战略重构
  • 【编号500】(道路分类)广东路网数据广东路网分类数据(2025年)
  • 【PHP7内核剖析】-1.3 FPM
  • 网络编程之UDP广播与粘包问题
  • h3笔记:polygon
  • Unity 性能优化 之 编辑器创建资源优化( 工作流 | 场景 | 预制体)
  • 《Python Web部署应知应会》No3:Flask网站的性能优化和实时监测深度实战
  • 《嵌入式硬件(十):基于IMX6ULL的按键操作》
  • JVM默认栈大小
  • 深度学习实战指南:从神经网络基础到模型优化的完整攻略
  • 浏览器性能测试深度解析:指标、工具与优化实践
  • 【嵌入式DIY实例-ESP32篇】-3D姿态测量(Pitch, Roll, Yaw)
  • LeetCode 0966.元音拼写检查器:三个哈希表实现
  • 深入浅出 HarmonyOS 应用开发:ArkTS 声明式 UI 与状态管理最佳实践
  • 大数据处理与清洗实战:从Spark到Flink的深度优化
  • 从零开始搞定C++类和对象:取地址运算符重载
  • 第8课:Agent协作模式实现
  • 【LeetCode 每日一题】3021. Alice 和 Bob 玩鲜花游戏
  • Zulu - 百度文心快码推出的自动编程智能体
  • AI学习工具三剑客:NotebookLM、Gemini Guided Learning与ChatGPT Study深度对比
  • 2025年渗透测试面试题总结-70(题目+回答)
  • 文献阅读笔记:RS电子战测试与测量技术文档
  • Redis---集群模式
  • 【Zephyr电源与功耗专题】14_BMS电池管理算法(三重验证机制实现高精度电量估算)
  • RK3568 NPU :RKNN-ToolKit2环境搭建
  • Dify插件安装
  • 闪电科创,深度学习辅导
  • Linux-文本三剑客(grep、sed、awk)
  • 桥接模式,打造灵活可扩展的日志系统C++