青少年编程知识记录 codecoming

【题解】走出迷宫的最少步数

【题目描述】

一个迷宫由R行C列格子组成,有的格子里有障碍物,不能走;有的格子是空地,可以走。



给定一个迷宫,求从左上角走到右下角最少需要走多少步(数据保证一定能走到)。只能在水平方向或垂直方向走,不能斜着走。

【输入描述】

第一行是两个整数,R和C,代表迷宫的行数和列数。( 1<= R,C <= 40)



接下来是R行,每行C个字符,代表整个迷宫。空地格子用’.‘表示,有障碍物的格子用’#‘表示。迷宫左上角和右下角都是’.’。

【输出描述】

输出从左上角走到右下角至少要经过多少步(即至少要经过多少个空地格子)。计算步数要包括起点和终点。

【样例输入】

5 5  ..###  #....  #.#.#  #.#.#  #.#..

【样例输出】

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

【题解】公交乘车

【题目描述】

A城市有一条非常特别的街道,该街道在每个公里的节点上都有一个公交车站,乘客可以在任意的公交站点上车,在任意的公交站点下车。乘客根据每次乘坐公交的公里数进行付费,比如,下表就是乘客乘坐不同的公里数要付的费用。(请注意:不一定公里数越高,费用越高,这也是这条街道特别的地方)

一辆公交车单次行驶的公里数一定不超过10公里,一个乘客如果打算乘坐公交车完成n公里(1<=n<=100)的行程,他可以选择无限次的换车来完成行程。

请问,他最少要花多少钱?

【输入描述】

 第一行十个整数分别表示公交行走1到10公里的费用(<=500)。注意这些数并无实际的经济意义,即行驶10公里费用可能比行驶一公里少。

第二行一个整数n表示,旅客的总路程数。 (1<=n<=100)

【输出描述】

仅一个整数表示最少费用。

【样例输入】

12 21 31 40 49 58 69 79 90 101  15

【样例输出】

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

【题解】摘花生问题

【题目描述】

Hello Kitty想摘点花生送给她喜欢的米老鼠。

她来到一片有网格状道路的矩形花生地(如下图),从西北角进去,东南角出来。

地里每个道路的交叉点上都有种着一株花生苗,上面有若干颗花生,经过一株花生苗就能摘走该它上面所有的花生。

Hello Kitty只能向东或向南走,不能向西或向北走。

问Hello Kitty最多能够摘到多少颗花生。

【输入描述】

第一行是一个整数T,代表一共有多少组数据。

接下来是T组数据。

每组数据的第一行是两个整数,分别代表花生苗的行数R和列数 C。

每组数据的接下来R行数据,从北向南依次描述每行花生苗的情况。每行数据有C个整数,按从西向东的顺序描述了该行每株花生苗上的花生数目M。

【输出描述】

对每组输入数据,输出一行,内容为Hello Kitty能摘到得最多的花生颗数。

【样例输入】

2  2 2  1 1  3 4  2 3  2 3 4  1 6 5

【样例输出】

8  16

【数据范围】

1 ≤ T ≤ 100,

1 ≤ R, C ≤ 100,

0 ≤ M ≤ 1000

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

【题解】采摘花生2

【题目描述】

Hello Kitty又一次来到花生地里摘花生,从左上角进入花生地,从右下角出去,只能向右或者向下,请问Hello Kitty应该沿着什么样的路线走,能够摘到的花生数量最多(假设花生地里没有任何2株的花生一样多,也不存在多条路线能够摘到一样多的花生的情况)?

比如输入:

2 2

1 2

3 4

应该输出:1-3-4,也就是按照1 3 4这三株数量的花生摘过去,能够摘到最多的花生!

【输入描述】

第一行是2个整数m和n(2=<m,n<=100),代表花生地有m行,n列花生!

后面m行,每行有n个整数代表了每行中,每株花生的数量

【输出描述】

输出Hello Kitty按照走过的路线中,摘到每株花生的数量。

【样例输入】

2 2  1 2   3 4

【样例输出】

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

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

【题目描述】

给你一个整数 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 。
作者:亿万年的星光 分类:题解目录 浏览: