题源来自---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])