【2022寒假萌新训练-4】7-6 统计字母比例
单链表是一种数据结构,由若干个结点组成。每个结点包含数据和下一个结点的地址。从头结点开始,通过下一个结点的地址找到下一个结点,如此循环,直到下一个结点的地址为空。
现给出一个单链表,每个结点包含的数据是一个字符(大写英文字母)。求该链表上的结点数据中各个字母所占比例。
输入格式:第一行给出链表第一个结点的地址H和要给出的结点总个数N。其中结点地址H用5位非负整数表示,N为不大于10000的正整数。 之后N行,每行按如下格式给出结点信息:
Address Data Next
Address为结点地址,Data为A-Z中的一个字母,Next为下一个结点的地址,Address和Next格式同H。当Next为-1时表示该结点没有下一个结点,链表遍历结束。
输出格式:按A-Z的顺序,按以下格式输出各个字母所占比例:
Character Percentage
其中Character为英文字母, Percentage为百分比,保留到小数点后2位。中间以空格分隔。 如果该字母没有出现过,则不输出。
输入样例:123456789101100001 1001044 E 0105500100 C 01011 ...
【2022寒假萌新训练-4】7-5 彩虹瓶
彩虹瓶的制作过程(并不)是这样的:先把一大批空瓶铺放在装填场地上,然后按照一定的顺序将每种颜色的小球均匀撒到这批瓶子里。
假设彩虹瓶里要按顺序装 N 种颜色的小球(不妨将顺序就编号为 1 到 N)。现在工厂里有每种颜色的小球各一箱,工人需要一箱一箱地将小球从工厂里搬到装填场地。如果搬来的这箱小球正好是可以装填的颜色,就直接拆箱装填;如果不是,就把箱子先码放在一个临时货架上,码放的方法就是一箱一箱堆上去。当一种颜色装填完以后,先看看货架顶端的一箱是不是下一个要装填的颜色,如果是就取下来装填,否则去工厂里再搬一箱过来。
如果工厂里发货的顺序比较好,工人就可以顺利地完成装填。例如要按顺序装填 7 种颜色,工厂按照 7、6、1、3、2、5、4 这个顺序发货,则工人先拿到 7、6 两种不能装填的颜色,将其按照 7 在下、6 在上的顺序堆在货架上;拿到 1 时可以直接装填;拿到 3 时又得临时码放在 6 号颜色箱上;拿到 2 时可以直接装填;随后从货架顶取下 3 进行装填;然后拿到 5,临时码放到 6 上面;最后取了 4 号颜色直接装填;剩下的工作就是顺序从货架上取下 5、6、7 依次装填。
但如 ...
【2022寒假萌新训练-4】7-4 简单计算器
本题要求你为初学数据结构的小伙伴设计一款简单的利用堆栈执行的计算器。如上图所示,计算器由两个堆栈组成,一个堆栈 S1存放数
字,另一个堆栈S2,存放运算符。计算器的最下方有一个等号键,每次按下这个键,计算器就执行以下操作:
1.从S1中弹出两个数字,顺序为n1和n2;
2.从S2中弹出一个运算符op;
3.执行计算n2 op n1;
4.将得到的结果压回S1;直到两个堆栈都为空时,计算结束,最后的结果将显示在屏幕上。
输入格式:输入首先在第一行给出正整数 N(1<N≤10 3),为 S1中数字的个数。
第二行给出 N 个绝对值不超过 100 的整数;第三行给出 N−1 个运算符 —— 这里仅考虑 +、-、*、/ 这四种运算。一行中的数字和符号都
以空格分隔。
输出格式:将输入的数字和运算符按给定顺序分别压入堆栈 S1和S2 ,将执行计算的最后结果输出。注意所有的计算都只取结果的整数部分。题目保证计算的中间和最后结果的绝对值都不超过 10^9。
如果执行除法时出现分母为零的非法操作,则在一行中输出:ERROR: X/0,其中 X 是当时的分子。然后结束程序。
输入样例:123540 ...
【2022寒假萌新训练-4】7-3 括号匹配
给定仅包含“()[]{}”六种括号的字符串,请你判断该字符串中,括号的匹配是否是合法的,也就是对应括号的数量、嵌套顺序完全正确。
输入格式:第一行一个整数T(T<=10)其后T行每行一个字符串只包含[{()}]六种字符(字符串长度2e5以内)
输出格式:对于每个字符串,匹配输出Yes,否则输出No
输入样例:1232{()[]}([)]
输出样例:12YesNo
思路给定一个括号序列,看序列是否合法,关键要明白如何判定序列是不合法的,而不合法其实就是有括号没有被正确地匹配掉,从左向右去遍历序列,它可包括以下三种情况:第一,遍历到了右括号,但是之前没有左括号和它匹配了;第二,遍历到了右括号,在它之前有左括号,但是很遗憾,不满足大对大、中对中、小对小,匹配不上;第三,遍历结束了,发现还有左括号没有被匹配掉。切记情况一定要讨论清楚了。结合上述,又因为每次匹配的时候,遍历到的那个右括号必须是和之前最后遇到的左括号匹配(显然,毕竟数学上不就这么用的么),所以我们会想到用stack这个特性为后进先出的数据结构来实现以上操作。代码如下:
代码1234567891011 ...
【2022寒假萌新训练-4】7-2 进制转换
输入十进制整数N和待转换的进制x(2、8、16),分别代表十进制N转换成二进制、八进制和十六进制,输出对应的结果。十六进制中
A~F用大写字母表示。
输入格式:输入两个整数N(十进制整数N)和x(x进制),中间用空格隔开。
输出格式:输出对应的结果。
输入样例:1123 2
输出样例:11111011
输入样例:1123 16
输出样例:17B
思路我们知道10进制数转x进制数的方法是利用短除法,每次去除以x,得到一个个余数,最后按得到的顺序,倒着输出每个余数就完事了。显然正着得到,倒着输出正好符合栈的特性–后进先出,因此我们只需要把得到的余数push到栈里,最后一个个pop出栈输出即可。需要注意的是,输出的时候,16进制的10-15要替换成A-F。
代码123456789101112131415161718192021222324252627282930313233343536#include <bits/stdc++.h>using namespace std;const string radix_16="0123456789ABCDEF";//可定义一个用于1 ...
【2022寒假萌新训练-4】7-1 栈的实现及基本操作
给定一个初始为空的栈和一系列压栈、弹栈操作,请编写程序输出每次弹栈的元素。栈的元素值均为整数。
输入格式:输入第1行为1个正整数n,表示操作个数;接下来n行,每行表示一个操作,格式为1 d或0。1 d表示将整数d压栈,0表示弹栈。n不超过20000。
输出格式:按顺序输出每次弹栈的元素,每个元素一行。若某弹栈操作不合法(如在栈空时弹栈),则对该操作输出invalid。
输入样例:1234567871 11 20001 30
输出样例:123421invalid3
思路栈的入门题了属于是,直接定义一个stl的stack,照着题意处理输入就好了。
代码123456789101112131415161718192021222324252627282930313233#include <bits/stdc++.h>using namespace std;int main(){ int n; cin>>n; stack<int> s; for(int i=0;i<n;i++) { int ...
【2022每日分享day20】C++集合操作
河北大学2022寒假萌新程序设计训练每日知识分享-day20
每日分享——C++集合操作set函数求并集、交集、差集、对称差集beg1,end1容器1的开始、结束迭代器,beg2,end2容器2的开始、结束迭代器
求交集set_intersection()
函数原型:set_intersection(iterator beg1,iterator end1,iterator beg2,iterator end2,iterator dest)
作用:将容器1和容器2的交集存到目标容器,dest为目标容器的起始迭代器。
求并集set_union()
函数原型:set_union(iterator beg1,iterator end1,iterator beg2,iterator end2,iterator dest)
作用:将容器1和容器2的并集存到目标容器,dest为目标容器的起始迭代器。
求差集set_difference()
函数原型:set_difference(iterator beg1,iterator end1,iterator beg2,iterator end2,it ...
【2022每日分享day19】数组为何从0开始编号
河北大学2022寒假萌新程序设计训练每日知识分享-day19
每日分享——数组为何从0开始编号为什么大多数编程语言中,数组要从 0 开始编号,而不是从 1 开始呢?从数组存储的内存模型上来看,“下标”最确切的定义应该是“偏移(offset)”。如果用 a 来表示数组的首地址,a[0]就是偏移为 0 的位置,也就是首地址,a[k]就表示偏移 k 个 type_size 的位置,所以计算 a[k]的内存地址只需要用这个公式:a[k]_address = base_address + k * type_size但是,如果数组从 1 开始计数,那我们计算数组元素 a[k]的内存地址就会变为:a[k]_address = base_address + (k-1) * type_size 对比两个公式,我们不难发现,从 1 开始编号,每次随机访问数组元素都多了一次减法运算,对于 CPU 来说,就是多了一次减法指令。数组作为非常基础的数据结构,通过下标随机访问数组元素又是其非常基础的编程操作,效率的优化就要尽可能做到极致。所以为了减少一次减法操作,数组选择了从 0 开始编号,而不是从 1 开始。C ...
【2022寒假精进训练-6】7-12 互评成绩
学生互评作业的简单规则是这样定的:每个人的作业会被k个同学评审,得到k个成绩。系统需要去掉一个最高分和一个最低分,将剩下的分数取平均,就得到这个学生的最后成绩。本题就要求你编写这个互评系统的算分模块。
输入格式:输入第一行给出3个正整数N(3 < N ≤104,学生总数)、k(3 ≤ k ≤ 10,每份作业的评审数)、M(≤ 20,需要输出的学生数)。随后N行,每行给出一份作业得到的k个评审成绩(在区间[0, 100]内),其间以空格分隔。
输出格式:按非递减顺序输出最后得分最高的M个成绩,保留小数点后3位。分数间有1个空格,行首尾不得有多余空格。
输入样例:在这里给出一组输入。例如:
12345676 5 388 90 85 99 6067 60 80 76 7090 93 96 99 9978 65 77 70 7288 88 88 88 8855 55 55 55 55
输出样例:在这里给出相应的输出。例如:
187.667 88.000 96.000
思路每次读入一组数据,数组存入后自动排序,并去掉最大值和最小值,直接将结果存入最终的结果数组中。注意最后输出时需要将前 ...
【2022寒假精进训练-6】7-13 肿瘤诊断
在诊断肿瘤疾病时,计算肿瘤体积是很重要的一环。给定病灶扫描切片中标注出的疑似肿瘤区域,请你计算肿瘤的体积。
输入格式:输入第一行给出4个正整数:M、N、L、T,其中M和N是每张切片的尺寸(即每张切片是一个M×N的像素矩阵。最大分辨率是1286×128);L(≤60)是切片的张数;T是一个整数阈值(若疑似肿瘤的连通体体积小于T,则该小块忽略不计)。
最后给出L张切片。每张用一个由0和1组成的M×N的矩阵表示,其中1表示疑似肿瘤的像素,0表示正常像素。由于切片厚度可以认为是一个常数,于是我们只要数连通体中1的个数就可以得到体积了。麻烦的是,可能存在多个肿瘤,这时我们只统计那些体积不小于T的。两个像素被认为是“连通的”,如果它们有一个共同的切面,如下图所示,所有6个红色的像素都与蓝色的像素连通。
输出格式:在一行中输出肿瘤的总体积。
输入样例:123456789101112131415163 4 5 21 1 1 11 1 1 11 1 1 10 0 1 10 0 1 10 0 1 11 0 1 10 1 0 00 0 0 01 0 1 10 0 0 00 0 0 00 0 0 10 0 ...