美文网首页
绿色计算模拟赛-第二阶段

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

作者: 风清云淡Python | 来源:发表于2018-11-06 16:59 被阅读0次

    第二阶段

    第一关-气温预测

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

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

    好的解答:

    相关文章

      网友评论

          本文标题:绿色计算模拟赛-第二阶段

          本文链接:https://www.haomeiwen.com/subject/fublxqtx.html