编程实现:
六月一日是国际儿童节,小蓝的学校为迎接儿童节要在学校的一块正方形空地上使用不同颜色的花卉摆放图案。
为了摆放的更精准,图案更漂亮,小蓝把这块正方形空地同比例缩小将其画在纸上,并平分成100*100的方格,每个方格的坐标点为,(1.1)……(100.100),如下图:
(有点模糊,和正常的xy坐标一样,不过是把最后一行看作第一行,y坐标在前,x坐标在后)
首先在指定坐标的方格内放置红色的花卉(每个方格放一盆),完成后,找出最多有多少盆红色花卉在同一条直线上。(同一直线包含同一列、同一行、同一对角线,红色花卉可以连续也可以不连续)
如:指定的坐标(2.1)、(3.2)、(5.2)、(43)、(34)、(65)的方格内放置红色的花卉,其中最多的红色花卉在同一条直线上的坐标点为(21)、(3.2)、(4.3)、(65),故最多有4盆红色的花卉在同一条直线上
(太模糊了,就给你们弄了一下,凑合看吧)
思路:
我们可以从四个方向考虑,一、横着的 二、竖着的 三、左对角线(右下左上方向) 四、右对角线(右上左下方向)
仔细观察不难发现(这里的仔细观察并非指死盯着图看,而是指自己动手写写画画),横着的:所有坐标的x坐标都一样(就是后一个数),竖着的:所有坐标的y坐标都一样(第一个数),左对角线:每个坐标x坐标和y坐标的差都一样,右对角线:每个坐标x坐标和y坐标的和都一样。
如图,understand?
上代码:
n=input().split(' ') # 首先先把输入进来的做一个简单处理,使其一个个坐标分开,每个坐标用字符串表示
l=[] # x坐标和y坐标的差汇总
r=[] # x坐标和y坐标的和汇总
y=[int(i[0]) for i in n] # y坐标汇总,每个都变为了数字
x=[int(i[2]) for i in n] # x坐标汇总
across=y.count(max(y,key=y.count)) # 所有y坐标中出现最多的元素一共有多少个,也就是我们要求的横着数最多有几盆花
vertical=x.count(max(x,key=x.count)) # 所有x坐标中出现最多的元素一共有多少个,也就是我们要求的竖着数最多有几盆花
for i in range(len(n)): # i是一个下标号
l.append(y[i]-x[i]) # 所有x坐标和y坐标的差
r.append(y[i]+x[i]) # 所有x坐标和y坐标的和
left=l.count(max(l,key=l.count)) # 所有x坐标和y坐标的差中出现次数最多的元素一共有多少个,也就是我们要求的左对角线数最多有几盆花
right=r.count(max(r,key=r.count)) # 所有x坐标和y坐标的和中出现次数最多的元素一共有多少个,也就是我们要求的右对角线数最多有几盆花
al=[across,vertical,left,right] # 把他们都填到一个列表里
print(max(al)) # 求最大值
好啦,今天的讲解就到这里啦,有什么疑问评论区或私信找我,欢迎三连,点赞、收藏、关注。



