CCF-CSP 201912-2 回收站選址(python實現)

 題源來自---CCF計算機職業資格認證官網,點擊報名入口,可進行模擬考試進行練習。代碼在最後。


2019122-1

 

2019122-2

2019122-3

 

代碼

看到網上有一些代碼思路是把座標點記錄在列表中,對於每一次判斷是否上下左右都有垃圾時用in判斷,也是很好的方法,需要多寫幾條語句轉換成對應的列表以及座標對形式。我的思路相比更囉嗦一點,需要用兩個列表分別記錄橫縱座標然後再做比較。

n=int(input()) #輸入的存垃圾地點數
a=[0]*n  #輸入的垃圾地點的橫座標
b=[0]*n #輸入的垃圾地點的縱座標
t=0 #記錄某點上下左右鄰居位置是否存在垃圾
num=[0]*5 #記錄滿足條件的地方其四個對角的得分

#輸入
for i in range(n):
    a[i],b[i]=map(int,input().split())

#兩層循環,對於每個座標循環判斷其上下左右是否存在。
#若存在,則判斷其對角種幾處有垃圾,把相應的值用num數組記錄
for o in range(n):
    t = 0
    hx,hy=a[o],b[o]+1     #上的橫縱座標
    rx,ry=a[o]+1,b[o]
    bx,by=a[o],b[o]-1
    lx,ly=a[o]-1,b[o]
    ci=0
    for i in range(n):
        if (a[i]==hx and b[i]==hy )or (a[i]==rx and b[i]==ry) or (a[i]==bx and b[i]==by) or (a[i]==lx and b[i]==ly):
            t=t+1
    k=0
    if t==4:
        #四個對角位置的橫縱座標
        lhx ,lhy = a[o] - 1 , b[o] + 1
        rhx ,rhy = a[o] + 1 , b[o] + 1
        rbx ,rby = a[o] + 1 , b[o] - 1
        lbx ,lby = a[o] - 1 , b[o] - 1
        for i in range(n):
            if (a[i] == lhx and b[i] == lhy) or (a[i] == rhx and b[i] == rhy) or (a[i] == lbx and b[i] == lby) or (
                    a[i] == rbx and b[i] == rby):
                k = k + 1
        num[k]+=1

#輸出
for j in range(5):
    print(num[j])


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章