绿色计算模拟赛-第二阶段

2018-11-06  本文已影响0人  风清云淡Python

第二阶段

第一关-气温预测

每日根据气温数组,请重新生成一个数组,新数组对应位置的是你需要再等待多久温度才会升高的天数。如果之后都不会升高,请用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表示。 你需要遵守以下规则:

编程要求

补充完善右侧代码区中的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 +

你不会收到这样的无效样例,因为船之间至少会有一个空位将它们分开。

好的解答:

上一篇下一篇

猜你喜欢

热点阅读