【Python训练营】Python每日一练----第10天:受伤的皇后

举报
是Dream呀 发表于 2022/01/29 22:12:21 2022/01/29
【摘要】 📢📢📢📣📣📣 🌻🌻🌻Hello,大家好我叫是Dream呀,一个有趣的Python博主,多多关照😜😜😜 🏅🏅🏅CSDN Python领域优质创作者,大二在读,欢迎大家...

在这里插入图片描述

📢📢📢📣📣📣
🌻🌻🌻Hello,大家好我叫是Dream呀,一个有趣的Python博主,多多关照😜😜😜
🏅🏅🏅CSDN Python领域优质创作者,大二在读,欢迎大家找我合作学习(文末有VX 想进学习交流群or学习资料 欢迎+++)
💕入门须知:这片乐园从不缺乏天才,努力才是你的最终入场券!🚀🚀🚀
💓最后,愿我们都能在看不到的地方闪闪发光,一起加油进步🍺🍺🍺
🍉🍉🍉“一万次悲伤,依然会有Dream,我一直在最温暖的地方等你”,唱的就是我!哈哈哈~🌈🌈🌈
🌟🌟🌟✨✨✨

前言:【Python训练营】是针对Python语言学习所打造的一场刷题狂欢party! 对基础知识把握不牢固的话,欢迎参考此套课程:Python公开课 搭配使用最佳嗷~喜欢的话就抓紧订阅起来吧!🍋🍋🍋如果对学习没有自制力或者没有一起学习交流的动力,欢迎私信或者在文末添加我的VX,我会拉你进学习交流群,我们一起交流学习,报团打卡

题目描述

题目描述
有一个 n \times nn×n 的国际象棋棋盘(nn 行 nn 列的方格图),请在棋盘中摆放 nn 个受伤的国际象棋皇后,要求:

任何两个皇后不在同一行。
任何两个皇后不在同一列。
如果两个皇后在同一条 45 度角的斜线上,这两个皇后之间行号的差值至少为 3 。
请问一共有多少种摆放方案。

输入描述
输入的第一行包含一个整数 nn。

其中,1 \leq n \leq 101≤n≤10。

输出描述
输出一个整数,表示答案。

输入输出样例

示例 1
输入
4
输出
2

  
 
  • 1
  • 2
  • 3
  • 4
  • 5

运行限制
最大运行时间:1s
最大运行内存: 128M

解题思路

  • 在输入端规定record:x = int(input()) record = [0] * x
  • 设置queen()函数表示到第几个皇后
  • judge()函数判断是否满足题目中的的要求, 确保其在不同列和对角线在这里插入代码片
        if record[k] == j or abs(record[k] - j) == abs(i - k):  # 不在同列或对角线
            return False

  
 
  • 1
  • 2
  • 当皇后个数到达最大时返回1,,其余依次遍历每种情况:
        if judge(record, i, j):
            record[i] = j  # 如果返回True,记录第i个皇后的列
            res += queen(record, i + 1, n)

  
 
  • 1
  • 2
  • 3

源码分享

# 一万次悲伤,依然会有Dream,我一直在最温暖的地方等你!
# @Time    : 2022/1/27 15:00
# @Author  : 是Dream呀!
# @File    : 受伤的皇后.py
import os
import sys
def judge(record, i, j):  # i第i个皇后,record第k皇后的列,j第i个皇后的列
    for k in range(0, i):
        if record[k] == j or abs(record[k] - j) == abs(i - k):  # 不在同列或对角线
            return False
    return True
def queen(record, i, n):  # 代表第i个皇后
    if i == n:
        return 1
    res = 0
    for j in range(0, n):
        if judge(record, i, j):
            record[i] = j  # 如果返回True,记录第i个皇后的列
            res += queen(record, i + 1, n)
    return res
x = int(input())
record = [0] * x
b = queen(record, 0, x)
print(b)

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

学习总结

🏅今天是我在Python训练营的第 10 天,希望每天都能见到最棒的你🏅

🏆往期文章----好文推荐🏆

🥇 [Python公开课]零基础玩转Python基础篇----第一节:Python的自我介绍

🥈 [Python公开课]零基础玩转Python进阶篇----第一节:Python中的文件操作

🥉 快来一场一场刷题狂欢的party吧!----【Python训练营】
🌲🌲🌲 好啦,这就是今天要分享给大家的全部内容了
❤️❤️❤️如果你喜欢的话,就不要吝惜你的一键三连了~
在这里插入图片描述
在这里插入图片描述

文章来源: xuyipeng.blog.csdn.net,作者:是Dream呀,版权归原作者所有,如需转载,请联系作者。

原文链接:xuyipeng.blog.csdn.net/article/details/122722215

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。