1. 程式人生 > >全國綠色計算大賽 模擬賽第二階段 (Python)

全國綠色計算大賽 模擬賽第二階段 (Python)

第1關:氣溫預測

挑戰任務

根據每日氣溫陣列,請重新生成一個數組,新陣列對應位置的是你需要再等待多久溫度才會升高的天數。如果之後都不會升高,請用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 = []
    i =0
    while i < len(temp_list)-1 :
        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

第2關:摺紙小遊戲

挑戰任務

樹袋熊是“綠盟”社群的一名綠色資源愛好者。他買了一個長方形彩紙,想要裁剪成儘可能大的相同大小的正方形彩紙送給女朋友,而且貫徹綠色精神,不能有剩餘。請你程式設計序來幫他追到女朋友吧!

題目描述:

長方形彩紙長m,寬n,求出裁剪的相同大小的正方形的邊長j的最大值以及小正方形的個數k。其中m,n,j,k均為正整數。

輸入:

第一行為長方形的長m 第二行為長方形的寬n

輸出: 返回result列表為 [j,k],其中j為正方形邊長最大值,k為正方形個數。

程式設計要求

補充完善右側程式碼區中的paperFolding(paper_info)函式,實現判斷正方形邊長最大值和正方形個數的功能,length

為長方形的長,width為長方形的寬。具體要求如下:

  • 不能有紙剩餘;
  • 所有的正方形大小必須相同;
  • 確保前兩個條件滿足的情況下,使正方形的邊長儘可能的大;
  • 將結果作為陣列返回。

測試說明

樣例1

輸入:

42

輸出:

[2,2]

樣例2

輸入:

73

輸出:

[1,21]

def paperFolding(paper_info):
    
    length = paper_info[0]    # 長
    width = paper_info[1]     # 寬

    '''********** BEGIN **********'''
    temp = 0
    c = 0
    if length > width :
        max = length
        min = width
    else :
        max = width
        min = length
    while max != min :
        c = max%min
        if c ==0 :
            max = min
            continue
        if c > min :
            max = c
        else :
            max = min
            min = c
    result = [max,int((length*width)/(max*min))]



    '''********** END ************'''
    return result

第3關:渡口與船

挑戰任務

給定一個渡口(二維的),請計算渡口中停了多少艘船。 船用 + 表示,空位用字母o表示。 你需要遵守以下規則:

  • 給你一個有效的渡口(二維陣列),僅由船和空位組成。
  • 船隻能水平或者垂直放置。換句話說,船隻能由 1 行, N 列組成,或者 N行, 1 列組成,其中N可以是任意大小。
  • 兩艘船之間至少有一個水平或垂直的空位分隔,即沒有相鄰的船。

程式設計要求

補充完善右側程式碼區中的countOfShips(ferry)函式,實現根據輸入的陣列來判斷船的數量,並將船的數量作為返回值返回。

測試說明

樣例1

輸入:

3 4+ + + +o o o oo 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 +

你不會收到這樣的無效樣例,因為船之間至少會有一個空位將它們分開。

# -*- coding: utf-8 -*-
"""
Created on Sun Oct  7 18:47:58 2018

@author: Gzw
"""

def countOfShips(ferry):
    '''********** BEGIN **********'''
    if ferry == [] :
        result = 0
        return result
    temp = 0
    row = len(ferry)
    row_empty = 0
    column = len(ferry[0])
    column_empty = 0
    m = n =  0
    count = 0
    type = 0
    result = 0
    if row == 1 :
        while n < column-1 :
            if (ferry[0][n] == '+') and (ferry[0][n] == ferry[0][n+1]) :
                result = 1
                return result
            n = n+1
        n = 0
        while n < column :
            if ferry[0][n] == 'o' :
                temp = temp+1
            n = n+1
        result = column - temp
        return result
    if column == 1 :
        m = 0
        n = 0
        temp =0
        while m < row-1 :
            if (ferry[m][0] == '+') and (ferry[m][0] == ferry[m+1][0]):
                result = 1
                return result
            m = m+1
        m = 0
        while m < row :
            if ferry[m][0] == 'o' :
                temp = temp+1
            m = m+1
        result = row-temp
        return result
    m = 0
    n = 0
    while m < row :
        count = 0
        for item in ferry[m] :
            if item == 'o' :
                count = count + 1
            if count == column :
                type == 1
                row_empty = row_empty+1
        m = m+1
    if type == 1 :
        result = row - row_empty
    else :
        count = 0
        while n < column :
            m = 0
            count = 0
            while m < row :
                if ferry[m][n] == 'o' :
                    count = count+1
                if count == row :
                    column_empty = column_empty + 1
                m = m+1
            n = n+1
        result = column - column_empty
            
            


    '''********** END ************'''
    return result