第二阶段
第一关-气温预测
每日根据气温数组,请重新生成一个数组,新数组对应位置的是你需要再等待多久温度才会升高的天数。如果之后都不会升高,请用0来代替。
例如:定给一个数组temps = {34,35,33,25,44,19,18,17}新生成的数组应该为[1, 3, 2, 1, 0, 0, 0, 0]。
temps数组第一天温度是34℃,第二天是35℃,所以对应新生成数组位置的数据应该是1,代表还需等待1天就会升温,第二天温度是35℃,还需等待3天才会出现比35℃还高的温度(44℃),第五天温度是44℃,都之后不会升温了,用则0来代替。
编程要求
完善补充代码右侧区中的dailyTemps(temp_list)函数,实现,最后返回计算的结果即可。
注意:气温列表长度的范围是[1, 10000]。每个气温的值的都是[0, 100]范围内的整数。
测试说明
样例1
输入:
34 35 33 25 44 45 46 17
输出:
[1, 3, 2, 1, 1, 1, 0, 0]
我的解答:
def dailyTemps(temp_list):
'''********** BEGIN **********'''
result = []# 声明result是一个列表
i =0
while i < len(temp_list)-1 :#循环遍历从第0个数到倒数第2个数
j = i
while temp_list[i] >= temp_list[j]:
j = j+1
if j == len(temp_list) :
break
if j == len(temp_list) :
result.append(0)
else :
result.append(j-i)
i = i+1
result.append(0)
'''********** END ************'''
return result
好的解答:有时候做循环操作的时候,用for range 比用while好
def dailyTemps(temp_list):
'''********** BEGIN **********'''
result = list()#声明一个列表
for i in range(len(temp_list)):#循环列表的下标
for k in range(1, len(temp_list)-i):
count = 0
# 在这里设置一个count是有必要的,当后面没有大的值时,就直接填0,有的话,返回k,就行,因为k不仅代表循环的下标,还表示个数。双重意义
if (temp_list[i] < temp_list[i+k]):
count = k
break
result.append(count)
'''********** END ************'''
return result
第二关-折纸小游戏
树袋熊是“绿盟”社区的一名绿色资源爱好者。他买了一个长方形彩纸,想要裁剪成尽可能大的相同大小的正方形彩纸送给女朋友,而且贯彻绿色精神,不能有剩余。请你编程序来帮他追到女朋友吧!
题目描述:
长方形彩纸长m,宽n,求出裁剪的相同大小的正方形的边长j的最大值以及小正方形的个数k。其中m,n,j,k均为正整数。
输入:
第一行为长方形的长m
第二行为长方形的宽n
输出:
返回result列表为 [j,k],其中j为正方形边长最大值,k为正方形个数。
编程要求
补充完善右侧代码区中的paperFolding(paper_info)函数,实现判断正方形边长最大值和正方形个数的功能,length为长方形的长,width为长方形的宽。具体要求如下:
- 不能有纸剩余;
- 所有的正方形大小必须相同;
- 确保前两个条件满足的情况下,使正方形的边长尽可能的大;
- 将结果作为数组返回。
测试说明
样例1
输入:
4
2
输出:
[2,2]
样例2
输入:
7
3
输出:
[1,21]
我的解答;问题的关键在于找到两个数的最大的公约数
i//j:表示整数除法。例如8//2的值为int类型4,9//4的值为int类型2。即整数除法只取整数商,去掉小数部分。
i/j:表示对象i除以对象j,无论i和j的类型是int还是float,结果都为float,如10/4结果为2.5。
def paperFolding(paper_info):
length = paper_info[0]
width = paper_info[1]
result = []
edge = hcf(length, width)
result.append(edge)
result.append(int(length*width/(edge*edge)))
return result
def hcf(x, y):
if x > y:
smaller = y
else:
smaller = x
for i in range(1, smaller + 1):
#找到最公约数
if ((x % i == 0) and (y % i == 0)):
hcf = i
return hcf
第三关-渡口与船
给定一个渡口(二维的),请计算渡口中停了多少艘船。 船用 + 表示,空位用字母o表示。 你需要遵守以下规则:
- 给你一个有效的渡口(二维数组),仅由船和空位组成。
- 船只能水平或者垂直放置。换句话说,船只能由
1行,N列组成,或者N行,1列组成,其中N可以是任意大小。 - 两艘船之间至少有一个水平或垂直的空位分隔,即没有相邻的船。
编程要求
补充完善右侧代码区中的countOfShips(ferry)函数,实现根据输入的数组来判断船的数量,并将船的数量作为返回值返回。
测试说明
样例1
输入:
3 4
+ + + +
o o o o
o o o o
输出:
1
样例2
输入:
3 4
+ o o +
o o o +
o o o +
输出:
2
注意:右侧测试集中有输入参数传入,如:3 4 ,这两个数字是后台构建渡口时传入的大小,不会作为函数countOfShips的参数传入,可以忽略这两个数字的作用。
无效样例:
o o o +
+ + + +
o o o +
你不会收到这样的无效样例,因为船之间至少会有一个空位将它们分开。
好的解答:











网友评论