CCF CSP认证 历年题目自练Day25

2023-10-08 22:36

本文主要是介绍CCF CSP认证 历年题目自练Day25,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目

试题编号: 201403-3
试题名称: 命令行选项
时间限制: 1.0s
内存限制: 256.0MB
问题描述:
问题描述
  请你写一个命令行分析程序,用以分析给定的命令行里包含哪些选项。每个命令行由若干个字符串组成,它们之间恰好由一个空格分隔。这些字符串中的第一个为该命令行工具的名字,由小写字母组成,你的程序不用对它进行处理。在工具名字之后可能会包含若干选项,然后可能会包含一 些不是选项的参数。
  选项有两类:带参数的选项和不带参数的选项。一个合法的无参数选项的形式是一个减号后面跟单个小写字母,如"-a" 或"-b"。而带参数选项则由两个由空格分隔的字符串构成,前者的格式要求与无参数选项相同,后者则是该选项的参数,是由小写字母,数字和减号组成的非空字符串。
  该命令行工具的作者提供给你一个格式字符串以指定他的命令行工具需要接受哪些选项。这个字符串由若干小写字母和冒号组成,其中的每个小写字母表示一个该程序接受的选项。如果该小写字母后面紧跟了一个冒号,它就表示一个带参数的选项,否则则为不带参数的选项。例如, “ab: m:” 表示该程序接受三种选项,即"-a"(不带参数),“-b”(带参数), 以及"-m"(带参数)。
  命令行工具的作者准备了若干条命令行用以测试你的程序。对于每个命令行,你的工具应当一直向后分析。当你的工具遇到某个字符串既不是合法的选项,又不是某个合法选项的参数时,分析就停止。命令行剩余的未分析部分不构成该命令的选项,因此你的程序应当忽略它们。
输入格式
  输入的第一行是一个格式字符串,它至少包含一个字符,且长度不超过 52。格式字符串只包含小写字母和冒号,保证每个小写字母至多出现一次,不会有两个相邻的冒号,也不会以冒号开头。
  输入的第二行是一个正整数 N(1 ≤ N ≤ 20),表示你需要处理的命令行的个数。
  接下来有 N 行,每行是一个待处理的命令行,它包括不超过 256 个字符。该命令行一定是若干个由单个空格分隔的字符串构成,每个字符串里只包含小写字母,数字和减号。
输出格式
  输出有 N 行。其中第 i 行以"Case i:" 开始,然后应当有恰好一个空格,然后应当按照字母升序输出该命令行中用到的所有选项的名称,对于带参数的选项,在输出它的名称之后还要输出它的参数。如果一个选项在命令行中出现了多次,只输出一次。如果一个带参数的选项在命令行中出 现了多次,只输出最后一次出现时所带的参数。
样例输入
albw:x
4
ls -a -l -a documents -b
ls
ls -w 10 -x -w 15
ls -a -b -c -d -e -l
样例输出
Case 1: -a -l
Case 2:
Case 3: -w 15 -x
Case 4: -a -b

题目分析(个人理解)

  1. 题目很长,大意是给出一种命令选项的描述方法,然后输入若干命令,需要按照给出的规则解析指令参数,忽略无效部分,然后按顺序输出有效部分。
  2. 此题还是先看输入,第一行输入模式串,第二行输入命令行的个数,由于模式串每个元素后面是否有冒号存在不同算法,所以,我将有冒号也就是要输出参数的元素放入multi_var = [] 然后将没有冒号,也就是不需要输出参数的元素存入multi_var = [],为什么这么做,因为后续还要判断要输出参数的元素有多个参数出现之后的取值问题。将复杂的问题分解,简单化之后逐一解决。
  3. 现在处理命令行的问题,命令行中的命令由空格分开,且如果不是带参数的命令长度不可能超过2,(由题意可知,每个符合命令格式的都是一个符号后面带一个字符,如果有参数则字符后面是参数值)也就是合法的长度只有可能是2或三个,如果超过即为不合法。
  4. 将命令行字符去空格(.split()方法)之后存入cmd[]中,注意split()方法是针对字符串的操作,去空格之后存入列表(返回值是列表)。现在只需判断每个cmd中的第一层列表的元素个数是否是2且第二层列表的第1个值是否是‘-’即可。
for m in range(n):cmd = input().split()option = dict()i = 1while i<len(cmd):if len(cmd[i]) == 2 and cmd[i][0] == "-":
  1. 如果是那么就是符合模式串的输出算法,进行下一步判断,到底是带参数还是不带参数,前面我将带参数和不带参数的模式串分别存放在了列表multi_var = []和single_var = []中。
  2. 那就只需要cmd中第二层列表的第二个元素,判断在哪个列表中不就完事了?好!问题又来了,输出的格式是满足输出算法的字符和参数,那有些值没参数,有些有参数,参数还要输出最后一次出现的参数,那我只能放在字典中,我使key赋值为符合输出算法的字符,value赋值为每个符合输出算法的参数,如果没有参数,那值设置为空即可。循环一次就更新写入一个item到字典option中,字典对于同一个key赋值两次的时候后一次覆盖前一次,那么就解决了符合输出算法的字符串的值如果有多次的话取最后一次的问题,关于输出还有一个要注意的,就是按照字母升序的顺序输出,那很容易,我直接把keys拿出来搞一个列表用sort()函数排序,然后再按排好的keys输出,然后遍历option中对应的keys的value有没有值,如果有就输出没有就空格和下一个分开就OK
  3. 前面第5点已经讲过如何判断带参数还是不带参数的符合输出算法的字符串。之后只需要将带参数的字符对应的参数值赋值给对应的value即可。
  4. 上代码!!!
form = input()
n = int(input())single_var = []#存储不带参数的
multi_var = []#存储带参数的# store options
form += " "
for i in range(len(form)-1):if form[i+1]==':':multi_var.append(form[i])elif form[i]!=':':single_var.append(form[i])for m in range(n):cmd = input().split()option = dict()i = 1while i<len(cmd):if len(cmd[i]) == 2 and cmd[i][0] == "-":# is form if cmd[i][1] in single_var:# no valueoption[cmd[i][1]]=""i+=1elif cmd[i][1] in multi_var and i+1 < len(cmd):# have valueoption[cmd[i][1]]= cmd[i+1]i+=2else:# 当你的工具遇到某个字符串既不是合法的选项,又不是某个合法选项的参数时, 分析就停止。# 命令行剩余的未分析部分不构成该命令的选项,因此你的程序应当忽略它们。# ls -a -b -c -d -e -l ; after -b is all ignored,because -cbreakelse:# ls -a -l -a documents -b# -a documents mistake ,so ignore -bbreak"""其中第 i 行以"Case i:" 开始,然后应当有恰好一个空格,然后应当按照字母升序输出该命令行中用到的所有选项的名称,对于带参数的选项,在输出它的名称之后还要输出它的参数。如果一个选项在命令行中出现了多次,只输出一次。如果一个带参数的选项在命令行中出 现了多次,只输出最后一次出现时所带的参数。"""keys = list(set(option.keys()))keys.sort()print("Case "+str(m+1)+":",end="")for key in keys:print(" -"+key,end="")if option[key]!="":print(" "+option[key],end="")print()

总结

CCF CSP认证的难度是按照题目序号升序增加的,所以今天试着挑战一下14年第三题,已经脑阔要爆炸,继续加油!
请添加图片描述
一个月没跑,感觉要废了,以后在csdn打卡跑步。

这篇关于CCF CSP认证 历年题目自练Day25的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/168447

相关文章

浅析Spring Security认证过程

类图 为了方便理解Spring Security认证流程,特意画了如下的类图,包含相关的核心认证类 概述 核心验证器 AuthenticationManager 该对象提供了认证方法的入口,接收一个Authentiaton对象作为参数; public interface AuthenticationManager {Authentication authenticate(Authenti

题目1254:N皇后问题

题目1254:N皇后问题 时间限制:1 秒 内存限制:128 兆 特殊判题:否 题目描述: N皇后问题,即在N*N的方格棋盘内放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在同一斜线上。因为皇后可以直走,横走和斜走如下图)。 你的任务是,对于给定的N,求出有多少种合法的放置方法。输出N皇后问题所有不同的摆放情况个数。 输入

题目1380:lucky number

题目1380:lucky number 时间限制:3 秒 内存限制:3 兆 特殊判题:否 提交:2839 解决:300 题目描述: 每个人有自己的lucky number,小A也一样。不过他的lucky number定义不一样。他认为一个序列中某些数出现的次数为n的话,都是他的lucky number。但是,现在这个序列很大,他无法快速找到所有lucky number。既然

CSP 2023 提高级第一轮 CSP-S 2023初试题 完善程序第二题解析 未完

一、题目阅读 (最大值之和)给定整数序列 a0,⋯,an−1,求该序列所有非空连续子序列的最大值之和。上述参数满足 1≤n≤105 和 1≤ai≤108。 一个序列的非空连续子序列可以用两个下标 ll 和 rr(其中0≤l≤r<n0≤l≤r<n)表示,对应的序列为 al,al+1,⋯,ar​。两个非空连续子序列不同,当且仅当下标不同。 例如,当原序列为 [1,2,1,2] 时,要计算子序列 [

【Kubernetes】K8s 的安全框架和用户认证

K8s 的安全框架和用户认证 1.Kubernetes 的安全框架1.1 认证:Authentication1.2 鉴权:Authorization1.3 准入控制:Admission Control 2.Kubernetes 的用户认证2.1 Kubernetes 的用户认证方式2.2 配置 Kubernetes 集群使用密码认证 Kubernetes 作为一个分布式的虚拟

【408数据结构】散列 (哈希)知识点集合复习考点题目

苏泽  “弃工从研”的路上很孤独,于是我记下了些许笔记相伴,希望能够帮助到大家    知识点 1. 散列查找 散列查找是一种高效的查找方法,它通过散列函数将关键字映射到数组的一个位置,从而实现快速查找。这种方法的时间复杂度平均为(

CSP-J基础之数学基础 初等数论 一篇搞懂(一)

文章目录 前言声明初等数论是什么初等数论历史1. **古代时期**2. **中世纪时期**3. **文艺复兴与近代**4. **现代时期** 整数的整除性约数什么样的整数除什么样的整数才能得到整数?条件:举例说明:一般化: 判断两个数能否被整除 因数与倍数质数与复合数使用开根号法判定质数哥德巴赫猜想最大公因数与辗转相除法计算最大公因数的常用方法:举几个例子:例子 1: 计算 12 和 18

码蹄集部分题目(2024OJ赛9.4-9.8;线段树+树状数组)

1🐋🐋配对最小值(王者;树状数组) 时间限制:1秒 占用内存:64M 🐟题目思路 MT3065 配对最小值_哔哩哔哩_bilibili 🐟代码 #include<bits/stdc++.h> using namespace std;const int N=1e5+7;int a[N],b[N],c[N],n,q;struct QUERY{int l,r,id;}que

【Shiro】Shiro 的学习教程(二)之认证、授权源码分析

目录 1、背景2、相关类图3、解析3.1、加载、解析阶段3.2、认证阶段3.3、授权阶段 1、背景 继上节代码,通过 debug 进行 shiro 源码分析。 2、相关类图 debug 之前,先了解下一些类的结构图: ①:SecurityManager:安全管理器 DefaultSecurityManager: RememberMeManager:实现【记住我】功能

CCF推荐C类会议和期刊总结(计算机网络领域)

CCF推荐C类会议和期刊总结(计算机网络领域) 在计算机网络领域,中国计算机学会(CCF)推荐的C类会议和期刊为研究者提供了广泛的学术交流平台。以下是对所有C类会议和期刊的总结,包括全称、出版社、dblp文献网址以及所属领域。 目录 CCF推荐C类会议和期刊总结(计算机网络领域) C类期刊 1. Ad Hoc Networks 2. CC 3. TNSM 4. IET Com