数据结构MOOC课后习题 01-复杂度1 最大子列和问题
01-复杂度 1 最大子列和问题题目要求给定K个整数组成的序列 { N1, N2, …, NK },“连续子列”被定义为 { Ni, Ni+1, …, Nj },其中 1≤i≤j≤K。“最大子列和”则被定义为所有连续子列元素的和中最大者。例如给定序列 { -2, 11, -4, 13, -5, -2 },其连续子列 { 11, -4, 13 } 有最大的和 20。现要求你编写程序,计算给定整数序列的最大子列和。
本题旨在测试各种不同的算法在各种数据情况下的表现。各组测试数据特点如下:
数据 1:与样例等价,测试基本正确性;
数据 2:102 个随机整数;
数据 3:103 个随机整数;
数据 4:104 个随机整数;
数据 5:105 个随机整数;
输入格式:输入第 1 行给出正整数K (≤100000);第 2 行给出K个整数,其间以空格分隔。
输出格式:在一行中输出最大子列和。如果序列中所有整数皆为负数,则输出 0。
输入样例:1236-2 11 -4 13 -5 -2结尾无空行
输出样例:1220结尾无空行
代码123456789101112131415161718192 ...
PTA团队天梯赛║L1-025 正整数A+B
PTA团队天梯赛║L1-025 正整数A+B一、题目要求题的目标很简单,就是求两个正整数A和B的和,其中A和B都在区间[1,1000]。稍微有点麻烦的是,输入并不保证是两个正整数。
输入格式:输入在一行给出A和B,其间以空格分开。问题是A和B不一定是满足要求的正整数,有时候可能是超出范围的数字、负数、带小数点的实数、甚至是一堆乱码。
注意:我们把输入中出现的第1个空格认为是A和B的分隔。题目保证至少存在一个空格,并且B不是一个空字符串。
输出格式:如果输入的确是两个正整数,则按格式A + B = 和输出。如果某个输入不合要求,则在相应位置输出?,显然此时和也是?。
输入样例1:1123 456
输出样例1:1123 + 456 = 579
输入样例2:122. 18
输出样例2:1? + 18 = ?
输入样例3:1-100 blabla bla...33
输出样例3:1? + ? = ?
二、解题思路思路 v1.0(未能完全通过测试点)
创建一个函数 isint() ,用于判断输入的是否为正整数,逐个字符判断是否为 0~9 之间的字符,一旦有一个字符不符合,返回值为0,否 ...
PTA团队天梯赛║L1-064 估值一亿的AI核心代码
PTA团队天梯赛║L1-064 估值一亿的AI核心代码一、题目要求本题要求你实现一个稍微更值钱一点的 AI 英文问答程序,规则是:
无论用户说什么,首先把对方说的话在一行中原样打印出来;
消除原文中多余空格:把相邻单词间的多个空格换成 1 个空格,把行首尾的空格全部删掉,把标点符号前面的空格删掉;
把原文中所有大写英文字母变成小写,除了 I;
把原文中所有独立的 can you、could you 对应地换成 I can、I could—— 这里“独立”是指被空格或标点符号分隔开的单词;
把原文中所有独立的 I 和 me 换成 you;
把原文中所有的问号 ? 换成惊叹号 !;
在一行中输出替换后的句子作为 AI 的回答。
输入格式:输入首先在第一行给出不超过 10 的正整数 N,随后 N 行,每行给出一句不超过 1000 个字符的、以回车结尾的用户的对话,对话为非空字符串,仅包括字母、数字、空格、可见的半角标点符号。
输出格式:按题面要求输出,每个 AI 的回答前要加上 AI: 和一个空格。
输入样例:12345676Hello ? Good to chat with you ...
PTA团队天梯赛║L1-072 刮刮彩票
PTA 团队天梯赛║L1-072 刮刮彩票一、题目要求刮刮彩票”是一款网络游戏里面的一个小游戏。如图所示:
每次游戏玩家会拿到一张彩票,上面会有 9 个数字,分别为数字 1 到数字 9,数字各不重复,并以 3×3 的“九宫格”形式排布在彩票上。
在游戏开始时能看见一个位置上的数字,其他位置上的数字均不可见。你可以选择三个位置的数字刮开,这样玩家就能看见四个位置上的数字了。最后玩家再从 3 横、3 竖、2 斜共 8 个方向中挑选一个方向,方向上三个数字的和可根据下列表格进行兑奖,获得对应数额的金币。
数字合计
获得金币
数字合计
获得金币
6
10,000
16
72
7
36
17
180
8
720
18
119
9
360
19
36
10
80
20
306
11
252
21
1,080
12
108
22
144
13
72
23
1,800
14
54
24
3,600
15
180
现在请你写出一个模拟程序,模拟玩家的游戏过程。
输入格式:输入第一部分给出一张合法的彩票,即用 3 行 3 列给出 0 至 9 的数字。 ...
PTA团队天梯赛║L2-003 月饼
PTA 团队天梯赛║L2-003 月饼一、题目要求月饼是中国人在中秋佳节时吃的一种传统食品,不同地区有许多不同风味的月饼。现给定所有种类月饼的库存量、总售价、以及市场的最大需求量,请你计算可以获得的最大收益是多少。
注意:销售时允许取出一部分库存。样例给出的情形是这样的:假如我们有 3 种月饼,其库存量分别为 18、15、10 万吨,总售价分别为 75、72、45 亿元。如果市场的最大需求量只有 20 万吨,那么我们最大收益策略应该是卖出全部 15 万吨第 2 种月饼、以及 5 万吨第 3 种月饼,获得 72 + 45/2 = 94.5(亿元)。
输入格式:每个输入包含一个测试用例。每个测试用例先给出一个不超过 1000 的正整数 N 表示月饼的种类数、以及不超过 500(以万吨为单位)的正整数 D 表示市场最大需求量。随后一行给出 N 个正数表示每种月饼的库存量(以万吨为单位);最后一行给出 N 个正数表示每种月饼的总售价(以亿元为单位)。数字间以空格分隔。
输出格式:对每组测试用例,在一行中输出最大收益,以亿元为单位并精确到小数点后 2 位。
输入样例:1233 2018 15 1 ...
PTA团队天梯赛║L1-071 前世档案
PTA 团队天梯赛║L1-071 前世档案一、题目要求网络世界中时常会遇到这类滑稽的算命小程序,实现原理很简单,随便设计几个问题,根据玩家对每个问题的回答选择一条判断树中的路径(如下图所示),结论就是路径终点对应的那个结点。
现在我们把结论从左到右顺序编号,编号从 1 开始。这里假设回答都是简单的“是”或“否”,又假设回答“是”对应向左的路径,回答“否”对应向右的路径。给定玩家的一系列回答,请你返回其得到的结论的编号。
输入格式:输入第一行给出两个正整数:N(≤30)为玩家做一次测试要回答的问题数量;M(≤100)为玩家人数。
随后 M 行,每行顺次给出玩家的 N 个回答。这里用 y 代表“是”,用 n 代表“否”。
输出格式:对每个玩家,在一行中输出其对应的结论的编号。
输入样例:123453 4ynynyynynyyn
输出样例:12343562
二、解题思路转化题目为找数学规律的题目,结论编号可通过每次问题的选择计算得出,令起始的结论编号为 1,遇到 ‘y’ 则结论编号不做变化,若遇到 ‘n’,则将结论编号加 2 n-j ( j ) 为第几个问题。
三、代码123456789 ...
PTA团队天梯赛║L1-059 敲笨种
PTA 团队天梯赛║L1-059 敲笨种一、题目要求微博上有个自称“大笨钟 V”的家伙,每天敲钟催促码农们爱惜身体早点睡觉。为了增加敲钟的趣味性,还会糟改几句古诗词。其糟改的方法为:去网上搜寻压“ong”韵的古诗词,把句尾的三个字换成“敲笨钟”。例如唐代诗人李贺有名句曰:“寻章摘句老雕虫,晓月当帘挂玉弓”,其中“虫”(chong)和“弓”(gong)都压了“ong”韵。于是这句诗就被糟改为“寻章摘句老雕虫,晓月当帘敲笨钟”。
现在给你一大堆古诗词句,要求你写个程序自动将压“ong”韵的句子糟改成“敲笨钟”。
输入格式:输入首先在第一行给出一个不超过 20 的正整数 N。随后 N 行,每行用汉语拼音给出一句古诗词,分上下两半句,用逗号 , 分隔,句号 . 结尾。相邻两字的拼音之间用一个空格分隔。题目保证每个字的拼音不超过 6 个字符,每行字符的总长度不超过 100,并且下半句诗至少有 3 个字。
输出格式:对每一行诗句,判断其是否压“ong”韵。即上下两句末尾的字都是“ong”结尾。如果是压此韵的,就按题面方法糟改之后输出,输出格式同输入;否则输出 Skipped,即跳过此句。
输入样例 ...
PTA团队天梯赛║L1-058 6翻了
PTA 团队天梯赛║L1-058 6 翻了一、题目要求666”是一种网络用语,大概是表示某人很厉害、我们很佩服的意思。最近又衍生出另一个数字“9”,意思是“6 翻了”,实在太厉害的意思。如果你以为这就是厉害的最高境界,那就错啦 —— 目前的最高境界是数字“27”,因为这是 3 个 “9”!
本题就请你编写程序,将那些过时的、只会用一连串“6666……6”表达仰慕的句子,翻译成最新的高级表达。
输入格式:输入在一行中给出一句话,即一个非空字符串,由不超过 1000 个英文字母、数字和空格组成,以回车结束。
输出格式:从左到右扫描输入的句子:如果句子中有超过 3 个连续的 6,则将这串连续的 6 替换成 9;但如果有超过 9 个连续的 6,则将这串连续的 6 替换成 27。其他内容不受影响,原样输出。
输入样例:1it is so 666 really 6666 what else can I say 6666666666
输出样例:1it is so 666 really 9 what else can I say 27
二、解题思路设置一个 cnt 用来记录遍历字符串时遇到的 ‘6 ...
PTA团队天梯赛║L1-056 猜数字
PTA 团队天梯赛║L1-056 猜数字一、解题思路一群人坐在一起,每人猜一个 100 以内的数,谁的数字最接近大家平均数的一半就赢。本题就要求你找出其中的赢家。
输入格式:输入在第一行给出一个正整数 N(≤104)。随后 N 行,每行给出一个玩家的名字(由不超过 8 个英文字母组成的字符串)和其猜的正整数(≤ 100)。
输出格式:在一行中顺序输出:大家平均数的一半(只输出整数部分)、赢家的名字,其间以空格分隔。题目保证赢家是唯一的。
输入样例:123456787Bob 35Amy 28James 98Alice 11Jack 45Smith 33Chris 62
输出样例:122 Amy
二、解题思路用一个结构体存储每个人的名字与数字,然后用 min 存储结构体数组中与平均数一半差值最小的下标,通过取绝对值比较差值的方法更新 min ,最后输出结果即可。
三、代码1234567891011121314151617181920212223242526272829#include <bits/stdc++.h>using namespace std;struct hm ...
PTA团体天梯赛║L1-054 福到了
PTA 团体天梯赛║L1-054 福到了一、题目要求“福”字倒着贴,寓意“福到”。不论到底算不算民俗,本题且请你编写程序,把各种汉字倒过来输出。这里要处理的每个汉字是由一个 N × N 的网格组成的,网格中的元素或者为字符 @ 或者为空格。而倒过来的汉字所用的字符由裁判指定。
输入格式:输入在第一行中给出倒过来的汉字所用的字符、以及网格的规模 N (不超过 100 的正整数),其间以 1 个空格分隔;随后 N 行,每行给出 N 个字符,或者为 @ 或者为空格。
输出格式:输出倒置的网格,如样例所示。但是,如果这个字正过来倒过去是一样的,就先输出bu yong dao le,然后再用输入指定的字符将其输出。
输入样例 1:12345678910$ 9 @ @@@@@@@@ @@@ @ @ @ @@@ @@@ @@@ @@@@@@@@ @ @ @@@@ @@@@@ @ @ @ @ @ @@@@@
输出样例 1:123456789$$$$$ $ $ $ $ $ $$$$$ $$$$ $ $ $$$$$$$$ $$$ $$$ $$$ $ $ $ $$$ $$$$ ...