青少年编程知识记录 codecoming

【题解】将钱分给最多的儿童

【题目描述】

给你一个整数 money ,表示你总共有的钱数(单位为美元)和另一个整数 children ,表示你要将钱分配给多少个儿童。

你需要按照如下规则分配:

  • 所有的钱都必须被分配。

  • 每个儿童至少获得 1 美元。

  • 没有人获得 4 美元。

请你按照上述规则分配金钱,并返回 最多 有多少个儿童获得 恰好 8 美元。如果没有任何分配方案,返回 -1 。

【输入描述】

一行,两个数,第一个数表示money,第二个数表示children

【输出描述】

一行,最多有多少个儿童获得恰好8美元。如果没有任何分配方案,输出-1

【样例1输入】

20 3

【样例1输出】

1

【样例1解释】

最多获得 8 美元的儿童数为 1 。一种分配方案为:  - 给第一个儿童分配 8 美元。  - 给第二个儿童分配 9 美元。  - 给第三个儿童分配 3 美元。  没有分配方案能让获得 8 美元的儿童数超过 1 。

【样例2输入】

16 2

【样例2输出】

2

【样例2解释】

每个儿童都可以获得 8 美元。

标签: 贪心

作者:亿万年的星光 分类:题解目录 浏览:

【题解】电池的寿命

【题目描述】

小S新买了一个掌上游戏机,这个游戏机由两节5号电池供电。为了保证能够长时间玩游戏,他买了很多5号电池,这些电池的生产商不同,质量也有差异,因而使用寿命也有所不同,有的能使用5个小时,有的可能就只能使用3个小时。显然如果他只有两个电池一个能用5小时一个能用3小时,那么他只能玩3个小时的游戏,有一个电池剩下的电量无法使用,但是如果他有更多的电池,就可以更加充分地利用它们,比如他有三个电池分别能用3、3、5小时,他可以先使用两节能用3个小时的电池,使用半个小时后再把其中一个换成能使用5个小时的电池,两个半小时后再把剩下的一节电池换成刚才换下的电池(那个电池还能用2.5个小时),这样总共就可以使用5.5个小时,没有一点浪费。

现在已知电池的数量和电池能够使用的时间,请你找一种方案使得使用时间尽可能的长。

【输入描述】

输入包含多组数据。每组数据包括两行,第一行是一个整数N(2≤N≤1000),表示电池的数目,接下来一行是N个正整数表示电池能使用的时间。

【输出描述】

对每组数据输出一行,表示电池能使用的时间,保留到小数点后1位。

【样例输入】

2  3 5  3  3 3 5

【样例输出】

3.0  5.5
作者:亿万年的星光 分类:题解目录 浏览:

【题解】营救巨轮

【题目描述】

一艘远洋巨轮在大海中遇到故障,船长库克立刻发出了求救信号。距离最近的辽宁号收到了讯息,时间就是生命,必须尽快赶到那里。

通过侦测,辽宁号获取了一张海洋图。这张图将海洋部分分化成n*n个比较小的单位,其中用1标明的是陆地,用0标明是海洋。船只能从一个格子,移到相邻的四个格子。

为了尽快赶到出事地点,辽宁号最少需要走多远的距离。

【输入描述】

第一行为n,下面是一个n*n的0、1矩阵,表示海洋地图

最后一行为四个小于n的整数,分别表示辽宁号和故障巨轮的位置。

【输出描述】

辽宁号到故障巨轮的最短距离,答案精确到整数。

【样例输入】

3  001  101  100  1 1 3 3

【样例输出】

4
作者:亿万年的星光 分类:题解目录 浏览:

【题解】骨牌铺方格

【题目描述】

有1×n(n<=50)的一个长方形,用一个1×1、1×2和1×3的骨牌铺满方格,请问有多少种铺法?

例如当n=3时为1×3的方格。此时用1×1、1×2和1×3的骨牌铺满方格,共有四种铺法。如下图:

【输入描述】

一个整数n(n<=50)

【输出描述】

骨牌的铺法

【样例输入】

3

【样例输出】

4
作者:亿万年的星光 分类:题解目录 浏览:

【题解】Crossing River

【题目描述】

几个人过河,每次过两人一人回,速度由慢者决定,问过河所需最短时间。

【输入描述】

输入t组数据,每组数据第1行输入n,第2行输入n个数,表示每个人过河的时间。

【输出描述】

输出t行数据,每行1个数,表示每组过河最少时间。

【样例1输入】

1  4  1 2 5 10

【样例1输出】

17

【题解】赢得比赛需要的最少训练时长

【题目描述】

你正在参加一场比赛,给你两个 正 整数 initialEnergy 和 initialExperience 分别表示你的初始精力和初始经验。

另给你两个下标从 0 开始的整数数组 energy 和 experience,长度均为 n 。

你将会 依次 对上 n 个对手。第 i 个对手的精力和经验分别用 energy[i] 和 experience[i] 表示。当你对上对手时,需要在经验和精力上都 严格 超过对手才能击败他们,然后在可能的情况下继续对上下一个对手。

击败第 i 个对手会使你的经验 增加 experience[i],但会将你的精力 减少  energy[i] 。

在开始比赛前,你可以训练几个小时。每训练一个小时,你可以选择将增加经验增加 1 或者 将精力增加 1 。

返回击败全部 n 个对手需要训练的 最少 小时数目。

【输入描述】

第一行3个数,分别表示initialEnergy、initialExperience和长度n

第二行n个数,表示energy,精力

第三行n个数,表示experience,经验数组

【输出描述】

一行,表示训练最少小时数

【样例1输入】

5 3 4  1 4 3 2  2 6 3 1

【样例1输出】

8

【样例1解释】

在 6 小时训练后,你可以将精力提高到 11 ,并且再训练 2 个小时将经验提高到 5 。  按以下顺序与对手比赛:  - 你的精力与经验都超过第 0 个对手,所以获胜。    精力变为:11 - 1 = 10 ,经验变为:5 + 2 = 7 。  - 你的精力与经验都超过第 1 个对手,所以获胜。    精力变为:10 - 4 = 6 ,经验变为:7 + 6 = 13 。  - 你的精力与经验都超过第 2 个对手,所以获胜。    精力变为:6 - 3 = 3 ,经验变为:13 + 3 = 16 。  - 你的精力与经验都超过第 3 个对手,所以获胜。    精力变为:3 - 2 = 1 ,经验变为:16 + 1 = 17 。  在比赛前进行了 8 小时训练,所以返回 8 。  可以证明不存在更小的答案。

【样例2输入】

2 4 1  1  3

【样例2输出】

0

【样例2解释】

你不需要额外的精力和经验就可以赢得比赛,所以返回 0 。
作者:亿万年的星光 分类:题解目录 浏览:

【题解】装满杯子需要的最短总时长

【题目描述】

现有一台饮水机,可以制备冷水、温水和热水。每秒钟,可以装满 2 杯 不同 类型的水或者 1 杯任意类型的水。

给你一个下标从 0 开始、长度为 3 的整数数组 amount ,其中 amount[0]amount[1] 和 amount[2] 分别表示需要装满冷水、温水和热水的杯子数量。返回装满所有杯子所需的 最少 秒数。

【输入描述】

一行,3个数,分别表示需要装满冷水、温水和热水的杯子数量。

【输出描述】

一行一个数,所需的最少秒数

【样例1输入】

1 4 2

【样例1输出】

4

【样例1解释】

下面给出一种方案:  第 1 秒:装满一杯冷水和一杯温水。  第 2 秒:装满一杯温水和一杯热水。  第 3 秒:装满一杯温水和一杯热水。  第 4 秒:装满一杯温水。  可以证明最少需要 4 秒才能装满所有杯子。

【样例2输入】

5 4 4

【样例2输出】

7

【样例2解释】

下面给出一种方案:  第 1 秒:装满一杯冷水和一杯热水。  第 2 秒:装满一杯冷水和一杯温水。  第 3 秒:装满一杯冷水和一杯温水。  第 4 秒:装满一杯温水和一杯热水。  第 5 秒:装满一杯冷水和一杯热水。  第 6 秒:装满一杯冷水和一杯温水。  第 7 秒:装满一杯热水。

【样例3输入】

5 0 0

【样例3输出】

5

【样例3解释】

每秒装满一杯冷水
作者:亿万年的星光 分类:题解目录 浏览:

【题解】使每位学生都有座位的最少移动次数

【题目描述】



一个房间里有 n 个 空闲 座位和 n 名 站着的 学生,房间用一个数轴表示。给你一个长度为 n 的数组 seats ,其中 seats[i] 是第 i 个座位的位置。同时给你一个长度为 n 的数组 students ,其中 students[j] 是第 j 位学生的位置。

你可以执行以下操作任意次:

  • 增加或者减少第 i 位学生的位置,每次变化量为 1 (也就是将第 i 位学生从位置 x 移动到 x + 1 或者 x - 1

请你返回使所有学生都有座位坐的 最少移动次数 ,并确保没有两位学生的座位相同。

请注意,初始时有可能有多个座位或者多位学生在 同一 位置。

【输入描述】

三行,第一行一个数n,表示有n个空格和n名同学。

第二行n个数,表示n个座位

第三行n个数,表示n个学生

【输出描述】

一行一个数,表示最少移动次数。

【样例1输入】

3  3 1 5  2 7 4

【样例1输出】

4

【样例1解释】

学生移动方式如下:  - 第一位学生从位置 2 移动到位置 1 ,移动 1 次。  - 第二位学生从位置 7 移动到位置 5 ,移动 2 次。  - 第三位学生从位置 4 移动到位置 3 ,移动 1 次。  总共 1 + 2 + 1 = 4 次移动。

【样例2输入】

4  4 1 5 9  1 3 2 6

【样例2输出】

7

【样例2解释】

学生移动方式如下:  - 第一位学生不移动。  - 第二位学生从位置 3 移动到位置 4 ,移动 1 次。  - 第三位学生从位置 2 移动到位置 5 ,移动 3 次。  - 第四位学生从位置 6 移动到位置 9 ,移动 3 次。  总共 0 + 1 + 3 + 3 = 7 次移动。

【样例3输入】

4  2 2 6 6  1 3 2 6

【样例3输出】

4

【样例3解释】

学生移动方式如下:  - 第一位学生从位置 1 移动到位置 2 ,移动 1 次。  - 第二位学生从位置 3 移动到位置 6 ,移动 3 次。  - 第三位学生不移动。  - 第四位学生不移动。  总共 1 + 3 + 0 + 0 = 4 次移动。

【数据范围】

  • n == seats.length == students.length

  • 1 <= n <= 100

  • 1 <= seats[i], students[j] <= 100

作者:亿万年的星光 分类:题解目录 浏览:

【题解】转换字符串的最少操作次数

【题目描述】

给你一个字符串 s ,由 n 个字符组成,每个字符不是 'X' 就是 'O' 。

一次 操作 定义为从 s 中选出 三个连续字符 并将选中的每个字符都转换为 'O' 。注意,如果字符已经是 'O' ,只需要保持 不变 。

返回将 s 中所有字符均转换为 'O' 需要执行的 最少 操作次数。

【输入描述】

一行字符串,由XO构成

【输出描述】

一行一个数,表示最少操作次数

【样例1输入】

XXX

【样例1输出】

1

【样例1解释】

XXX -> OOO  一次操作,选中全部 3 个字符,并将它们转换为 'O' 。

【样例2输入】

XXOX

【样例2输出】

2

【样例2解释】

XXOX -> OOOX -> OOOO  第一次操作,选择前 3 个字符,并将这些字符转换为 'O' 。  然后,选中后 3 个字符,并执行转换。最终得到的字符串全由字符 'O' 组成。

【样例3输入】

OOOO

【样例3输出】

0

【样例3解释】

不存在需要转换的 'X' 。
作者:亿万年的星光 分类:题解目录 浏览:

【题解】最少操作使数组递增

【题目描述】

给你一个整数数组 nums (下标从 0 开始)。每一次操作中,你可以选择数组中一个元素,并将它增加 1 。

比方说,如果 nums = [1,2,3] ,你可以选择增加 nums[1] 得到 nums = [1,3,3] 。

请你返回使 nums 严格递增 的 最少 操作次数。

我们称数组 nums 是 严格递增的 ,当它满足对于所有的 0 <= i < nums.length - 1 都有 nums[i] < nums[i+1] 。一个长度为 1 的数组是严格递增的一种特殊情况。

【输入描述】

一行,表示nums数组,每个数用空格隔开。

【输出描述】

一行,表示最少操作次数。

【样例1输入】

1 1 1

【样例1输出】

3

【样例1解释】

解释:你可以进行如下操作:  1) 增加 nums[2] ,数组变为 [1,1,2] 。  2) 增加 nums[1] ,数组变为 [1,2,2] 。  3) 增加 nums[2] ,数组变为 [1,2,3] 。

【样例2输入】

1 5 2 4 1

【样例2输出】

14

【样例3输入】

8

【样例3输出】

0
作者:亿万年的星光 分类:题解目录 浏览: