当前位置: 当前位置:首页 > 综合 > 程序设计思维WEEK9-WEEK16作业及实验正文

程序设计思维WEEK9-WEEK16作业及实验

作者:百科 来源:探索 浏览: 【 】 发布时间:2024-05-03 20:38:26 评论数:

程序设计思维WEEK9-WEEK16作业及实验

题干
在这里插入图片描述在这里插入图片描述在这里插入图片描述思路
每个文件夹是一个结构体,里面存储有当前文件夹名字、上层目录名、设计思子目录列表、作业子目录个数以及用来存储子目录前五个和后五个的及实两个数组,用文件夹结构体数组存储所有的文件夹信息,子目录列表用map结构体存储,它的优势就是可以将子节点按照字典序存储,同时里还有很多可以直接利用的函数,比如find判断是否已存在待建立文件夹,非常方便,由于牵扯到撤销操作的问题,所以需要一个vector数组来记录历史记录,用vector它的优势除了不用预支空间之外,删除节点也非常方便。历史记录里存储有操作命令名和文件夹名以及文件夹数组的程序索引,便于撤销操作。
在创建文件夹时,先在当前文件夹的设计思子目录列表里判断是否存在,若存在报错,若不存在就填充一个文件夹数组空间,按次序排索引,将这一指令加入历史记录同时更新上层目录数据,上层文件夹的子目录数增加一个,依次向上,直到到达根节点;删除文件夹时,也是先判断,判断存在之后,添加删除记录,将上层目录文件夹的子目录列表里的该节点移除,并更新子目录个数;cd操作其实就是找到当前文件夹的索引,如果能找到该文件夹,就将当前索引改为目标文件夹的索引,如果找不到或不存在就报错;sz操作,直接调用文件夹的子目录个数参数就可以了;ls操作,先看子目录个数,小于10直接将子目录名字输出,大于10就遍历输出前五个和后五个;tree操作,根据子目录数目判断,采取不同的遍历操作,小于10的时候,如果跟上次相比数据没有更新过,直接输出上次的结果,如果更新了,就重新遍历,通过前序遍历将以该文件夹为根的树输出;当大于10时,从两个方向分别遍历,找到前五个和后五个;撤销操作,根据历史记录的记录,如果之前的一个成功的操作是创建,就删除新创建的文件,如果之前的操作是删除,就把本该存在的文件夹再建立回去,如果是进入操作,就更新当前文件夹索引。
代码

题干
在这里插入图片描述在这里插入图片描述在这里插入图片描述思路
建立玩家结构体,包含玩家姓名,牌数的数组,牌型代号,对子数组牌型,三个的余下总和和排序规则。在输入名字和牌的及实时候,将牌中的字母转化成数字,并且记录不同牌数出现的次数,之后根据次数再记录出现不同次数的次数,并且细化他们分别是哪种牌型,并且将每种牌型的重要特征记录到玩家结构体里,最后比较每个玩家的优先级从而输出玩家姓名。
代码

题干
在这里插入图片描述在这里插入图片描述思路
借鉴了博客上其他同学的做法,将所有TA开会的时间起止点以及范围起止点放入一个大结构体数组内,并且排序存放,之后找两个指针,分别代表可以开会的起止时间点,用类似于滑动窗口的做法,不断滑动指针位置,判断寻找符合要求的时间点。
代码

题干
在这里插入图片描述思路
LIS是最长递增子序列:从左到右的求前i长度的序列的最长递增子序列的长度,状态转移方程:
dp[i] = Max(dp[j] + 1);i in range(1, len); j in range(1, i - 1);LCS是最长公共子序列。
代码

题干
在这里插入图片描述思路
将a[i]数组进行一个转化,建立一个新的b[i]数组,转化为b[a[i]]=max(b[a[i]-1],b[a[i]-2]+a[i]),这种形式就跟ppt上的形式一样了、
代码

题干
在这里插入图片描述思路
计算题,在二十年内循环计算累计工资和当年房价,若工资大于房价,则输出年数;若20年都不能攒够,则不可能
代码

题干
在这里插入图片描述
思路
首先将两个方阵存储到两个数组里,旋转数组相当于改变数组索引遍历数组,于是旋转不同角度得到的新数组可以通过不同的遍历规则生成三个新数组,然后用四个数组跟目标数组比较,当数组数据完全匹配时,说明可以旋转得到,否则得不到。
代码

题干
在这里插入图片描述思路
首先将密文输入到一个数组中,然后逐个判断,如果不是大写字符就照常输出,如果是字符,当是F之后的,根据ACSII码之前向前减5,F之前的转到A之前再从Z开始减
代码

题干
在这里插入图片描述思路
不停地记录当前两段相邻的相同数据的个数,并且一直更新最大的符合条件的寿司长度,最后遍历完整个数组,输出最长长度。
代码

题干
在这里插入图片描述思路
每次输入一个数,就判断一下他跟上一个数是否相同,若不同就更新上一个数并且计数加一。
代码

题干
在这里插入图片描述思路
新建一个数组方阵,初始化为0,然后遍历原数组每一行和每一列,每当发现存在三个相连的数字一样时,新建的数组就置换为1,最后遍历0/1数组,若该位置为0,就照常输出原数,若为1,就输出0.
代码

在这里插入图片描述思路
首先先假设所有的字符串都符合要求,将答案初始化为n*(n-1)/2,然后依次遍历字符串,判断是否符合回文子串,不符合就减去相应的数目,最后输出答案
代码

题干
在这里插入图片描述思路
将这些数按顺序排好,依次判断不同数的大小,当找到符合数量的数时,果断输出。
代码

题干
在这里插入图片描述
思路
用一个三维数组记录立方体的每个位置,可以走为1,不能走为0,然后记录起始点和终点位置,用广度优先搜索去寻找可行的路线,用队列存储路径。
代码

题干
在这里插入图片描述
思路
动态规划,前i间扫j次的最大值f[i][j]=max{ f[i-1][j]+a[i],f[k][j-1]+a[i]}.
代码

题干
在这里插入图片描述思路
用n除以k,若n比k还小,肯定不行;若除完得到的余数为偶数,肯定可以,将这个偶数加到其中一个数上,奇偶性不变;若除完得到的余数为奇数但是k是偶数,肯定不行,加进去至少会有一个数跟其他不一样;若除完得到余数为奇数,但是k是奇数,有两种情况,除完的数是1,怎么加都不对,另一种情况,除完得到的数大于1,那么其中一个加上余数,其他数,一半加一,一半减一,就符合要求了。
代码

题干
在这里插入图片描述
思路
从0开始,每次向后迁移k个数,然后计算k个数里能被n整除的数的个数,减去之前能被整除的个数,就是还差的个数,于是每次继续向后扩展差的数字,最后当差的数字恰好为0的时候,就是迁移到的数。
代码

题干
在这里插入图片描述思路
动态规划, dp[i][j]=max(max(dp[i+1][j],dp[i+1][j+1]),dp[i+1][j-1]);dp[i][0] = max(dp[i + 1][0], dp[i + 1][1])
代码

题干
在这里插入图片描述
思路
按次序输出重复的最后一个数,每次次序叠加
代码

题干
在这里插入图片描述
思路
利用公式累加计算
代码

题干
在这里插入图片描述
思路
用一个函数把数字的每一位相加返回一个新数,然后如果这个数不是一位数就再次调用函数,直到最后得到一位数。
代码

题干
在这里插入图片描述
思路
写一个函数,每隔相应的个数就将该位置的数做相反的处理,主函数调用函数。
代码

题干
在这里插入图片描述
思路
把六种情况列出来,if else分情况积分,最后比较两个孩子的分数。
代码

题干
在这里插入图片描述
思路
思路跟上一个实验差不多,列举不同的情况积分。
代码

题干
在这里插入图片描述思路
用一个数组记录Q老师每种出法的数目,然后每输入一种出法,就去找相应的可以赢的数目看看是否可以赢,有的话就在输出列表里填入对应的符号,并且计数,如果赢的出法暂时没有的话,就先用?表示,最后如果计数达标,就能赢,然后按照输出数组输出符号,将?换成剩余的符号。
代码

题干
在这里插入图片描述在这里插入图片描述思路
去找黑色最多的行和黑色最多的列,当有多种情况的时候,判断是否有交叉处为白色的情况,若有,就减去一个。
代码

题干
在这里插入图片描述思路
利用矩阵快速幂运算。
代码

题干
在这里插入图片描述在这里插入图片描述思路
用字符串输入时间,并且用分钟处理,同时将一天延伸至两天。当有番局的时长大于B的话,直接否决。将每个番局按照时间排序,如果两番之间间隔大于A的话,这段时间就用来睡觉,如果小于A的话就醒着,但是这样就要判断从上次醒来到这次番局结束时长是否超过B,超的话也否决。
代码

题干
在这里插入图片描述思路
用一个数组,依照索引和数字的关系输入数组。
代码

题干
在这里插入图片描述思路
寻找第一个ACSII码大于前面字母的字母,删除这一个,输出剩下的。
代码

题干

在这里插入图片描述思路
记录下每一次的公交车时间,然后依次判断东东上车时间在不在这些时间段内。
代码

题干
在这里插入图片描述思路
计算每个数的不同数字的个数,比较是否小于k,计算总数。
代码

题干
在这里插入图片描述思路
从每一个点出发,求每个点与其他点距离的最大值,这样,保证每个点为中心的圆可以包围所有点,然后,求这些距离里最小的距离,那么这个点就是要找的中心点。
代码

题干
在这里插入图片描述思路
用dp区间做,建立两个数组L[i][j],R[i][j],分别代表左子树和右子树是否合法。
代码

题干
在这里插入图片描述在这里插入图片描述思路
由于输入的字符串可能为空,所以要用getline(),如果只用cin无法输入空字符。如果输入的字符串第一个字符不是“/”说明是相对路径,转换方法是当前目录加上目标目录;如果第一个字符是“.”,说明位置是从当前目录开始记录;如果都一个字符是“…”,说明位置是从当前目录的上一级开始;如果开头是“/”的话,说明是绝对目录,位置应该从根目录开始记录。
代码

题干
在这里插入图片描述在这里插入图片描述思路
建立英雄和随从结构体,里面存有他们的攻击和防御指数,然后建立一个英雄的二维数组,存放所有英雄和随从的数据。当召唤随从时,将之前的随从索引向右移位,新建一个随从结构体放入数组内,当攻击时,根据随从索引对对应的随从或英雄的生命值进行修改,如果随从的生命值减为0及以下,将该随从从数组删除,如果有一方英雄先死亡那么该方战败,如果最后场上双方英雄血量都大于0,则比赛未完成。
代码

题干
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
思路
建立元素的结构体,里面存储有该元素的标签、id、父级的标签和id,以及省略号的数目。用这个元素数组来存储所有的元素信息。选择器用字符串存储,由于牵扯到空格,使用getline读取数据,标签选择器和id选择器都比较好操作,遍历元素数组,寻找标签和id相符的元素即可,后代选择器相对麻烦一些,要综合考虑后代和父代条件,后代首先级数要符合,然后标签要一样,然后要在父代里寻找相同数目的标签或id,都符合条件的才能作为结果输出。
代码