绿色计算模拟赛-第二阶段
第二阶段
第一关-气温预测
每日根据气温
数组,请重新生成一个数组,新数组对应位置的是你需要再等待多久温度才会升高的天数。如果之后都不会升高,请用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 +
你不会收到这样的无效样例,因为船之间至少会有一个空位将它们分开。
好的解答: