携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第13天,点击查看活动详情
大家好 我是短袖撸码蒂尔尼。今天带来的是一道python的题目,来自之前我的一个朋友的课程作业,在他提交完作业之后,我搞到了原题,题目难度不大。但我好久没做过这种题目了,就在此为大家分享一下解答思路。
题目阐述
思路阐述
这个题目思路比较简单:
- 创建chicken类,类包含小鸡的x y坐标值。
- 创建函数chickencompare 判断在横向 纵向 和对角线上的小鸡位置是否冲突
chicken类如下:
class chicken :
def __init__(self,x,y):
self.x=x;
self.y=y;
# judge parallel, vertical or two diagonal directions
def chickencompare(self,chicken):
if(self.x==chicken.x or self.y==chicken.y):
return 1
elif(self.x*self.y*chicken.x*chicken.y!=0):
return (int)((self.x/chicken.x)==(self.y/chicken.y))
else:
return 0
然后接下来的判断就很简单了:
chickenlist=[]
for i in range(n):
arr2=input()
[x,y]=(int(j) for j in arr2.split())
chickenlist.append(chicken(x,y))
if(n<2):
print('Safe')
else:
isAttack=0
for i in range(0,n-2):
for j in range(i+1,n-1):
if(chickenlist[i].chickencompare(chickenlist[j])==1):
print('Attack')
isAttack=1
break
if(isAttack==0):
print('Safe')
这里唯一要注意的是n的越界问题,其他的就是简单的遍历,比较,毫无难度,看下一题。
第二题
思路阐述
这是一个很经典的八皇后题目
在8×8格的国际象棋上摆放8个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。
思路基本上就是:
- 创建一个judge函数 判断是否冲突
- 然后用getAllchickenPlacments用来模拟路线:
- 当judge返回true的时候 落子 下一步进行 getAllchickenPlacments(r+1, n)递归
代码如下: judge函数 在水平,垂直,对角线上判断小鸡的位置是否冲突
def judge(r, c):
for a,b in zip(range(r-1, -1, -1), range(c-1, -1, -1)):
if chicken[a][b] == 1:
return False
for a,b in zip(range(r-1, -1, -1), range(c+1, n)):
if chicken[a][b] == 1:
return False
for k in range(n):
if chicken[k][c] == 1:
return False
return True
getAllchickenPlacments函数如下:
def getAllchickenPlacments(r, n):
if r > n-1:
global count_placements
count_placements += 1
return
for c in range(n):
if judge(r, c):
chicken[r][c] = 1
getAllchickenPlacments(r+1, n)
chicken[r][c] = 0
剩下就是主程序了:
if __name__ == '__main__':
arr = input()
n = int(arr)
count_placements = 0
chicken = [[0 for i in range(n)] for i in range(n)]
getAllchickenPlacments(0, n)
print(count_placements)
好了,这就是这道简单的保护小鸡鸡的解题思路。
我是短袖撸码蒂尔尼
一名热爱阿森纳的前端工程师
如果本文对您有帮助,可以给一个免费的赞吗?谢谢!