題源來自---CCF計算機職業資格認證官網,點擊報名入口,可進行模擬考試進行練習。代碼在最後。
代碼
看到網上有一些代碼思路是把座標點記錄在列表中,對於每一次判斷是否上下左右都有垃圾時用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])