Python每日一练(20230419)

这篇具有很好参考价值的文章主要介绍了Python每日一练(20230419)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Python每日一练(20230419)

目录

1. N皇后 II  🌟🌟🌟

2. 迷宫问题(递归)  🌟🌟🌟

3. 体操比赛成绩统计  ※

🌟 每日一练刷题专栏 🌟

Golang每日一练 专栏

Python每日一练 专栏

C/C++每日一练 专栏

Java每日一练 专栏


1. N皇后 II

n 皇后问题 研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。

给你一个整数 n ,返回 n 皇后问题 不同的解决方案的数量。

示例 1:

Python每日一练(20230419)

输入:n = 4
输出:2
解释:如上图所示,4 皇后问题存在两个不同的解法。

示例 2:

输入:n = 1
输出:1

提示:

  • 1 <= n <= 9
  • 皇后彼此不能相互攻击,也就是说:任何两个皇后都不能处于同一条横行、纵行或斜线上。

以下程序实现了这一功能,请你填补空白处内容:

```python
class Solution(object):
    def __init__(self):
        self.count = 0
    def totalNQueens(self, n):
        self.dfs(0, n, 0, 0, 0)
        return self.count
    def dfs(self, row, n, column, diag, antiDiag):
        if row == n:
            self.count += 1
            return
        for index in range(n):
            isColSafe = (1 << index) & column == 0
            isDigSafe = (1 << (n - 1 + row - index)) & diag == 0
            isAntiDiagSafe = (1 << (row + index)) & antiDiag == 0
            if isAntiDiagSafe and isColSafe and isDigSafe:
                _________________________;
if __name__ == '__main__':
    s = Solution()
    print (s.totalNQueens(4))
```

出处:

https://edu.csdn.net/practice/25949963

代码:

class Solution(object):
    def __init__(self):
        self.count = 0
    def totalNQueens(self, n):
        self.dfs(0, n, 0, 0, 0)
        return self.count
    def dfs(self, row, n, column, diag, antiDiag):
        if row == n:
            self.count += 1
            return
        for index in range(n):
            isColSafe = (1 << index) & column == 0
            isDigSafe = (1 << (n - 1 + row - index)) & diag == 0
            isAntiDiagSafe = (1 << (row + index)) & antiDiag == 0
            if isAntiDiagSafe and isColSafe and isDigSafe:
                self.dfs(row + 1,  n, (1 << index) | column,
                    (1 << (n - 1 + row - index)) | diag,
                    (1 << (row + index)) | antiDiag)

if __name__ == '__main__':
    s = Solution()
    print(s.totalNQueens(4))
    s = Solution()
    print(s.totalNQueens(1))

输出:

2
1


2. 迷宫问题(递归)

问题描述:一只老鼠在一个n×n迷宫的入口处,它想要吃迷宫出口处放着奶酪,问这只老鼠能否吃到奶酪?如果可以吃到,请给出一条从入口到奶酪的路径。

思考:解决问题之前,我们首先要做的就是仔细研究问题,找出问题的已知条件和要得到的是什么。和解数学问题、物理问题一样要先弄懂问题。那么,老鼠走迷宫问题的已知条件有什么呢?

数学模型重新定义问题:

问题:问老鼠能否吃到奶酪就是问能否找到一条从迷宫入口到出口的路径。如果不能找到,那么老鼠就吃不到奶酪;如果能够找到,那么就给出这条路径。

观察10×10的迷宫。这个迷宫其实是由10×10=100个格子组成的,其中绿色格子代表墙,白色格子代表路,如图(1)所示。

Python每日一练(20230419)

“绿色格子代表墙,白色格子代表路”是用语言形式描述的,需要转换成数学的形式。用1和0分别定义绿色格子和白色格子,可以得到如图(2)的迷宫。

Python每日一练(20230419)

将上面10×10的迷宫定义为如下的二维数组,即

m[10][10]=[
[1,1,1,0,1,1,1,1,1,1],
[1,0,0,0,0,0,0,0,1,1],
[1,0,1,1,1,1,1,0,0,1],
[1,0,1,0,0,0,0,1,0,1],
[1,0,1,0,1,1,0,0,0,1],
[1,0,0,1,1,0,1,0,1,1],
[1,1,1,1,0,0,0,0,1,1],
[1,0,0,0,0,1,1,1,0,0],
[1,0,1,1,0,0,0,0,0,1],
[1,1,1,1,1,1,1,1,1,1]

有了对迷宫的数学定义,就可以很简单的定义迷宫的入口和出口了。迷宫的入口是m[0][3],出口是m[7][9]。老鼠走迷宫问题就是要找一条从入口到出口的路径,如果存在就返回这条路径;如果不存在,就返回不存在这种路径。也就是说,要在二维数组m中找一条从m[0][3]到m[7][9]全部为0的路径。 请使用递归解决迷宫路径查找问题。

以下程序实现了这一功能,请你填补空白处内容:

```python
def maze(m, n, route, pos, export):
    """走迷宫
    m       - 迷宫数组,列表
    n       - 迷宫阶数
    route   - 可能的路线,列表
    pos     - 当前位置,元组
    export  - 出口位置,元组
    """
    route.append(pos)
    if pos == export:
        print(route)
    if pos[0] > 0 and m[pos[0]-1][pos[1]] == 0 and (pos[0]-1,pos[1]) not in route:
        maze(m, n, route[:], (pos[0]-1,pos[1]), export)
    if pos[0] < n-1 and m[pos[0]+1][pos[1]] == 0 and (pos[0]+1,pos[1]) not in route:
        maze(m, n, route[:], (pos[0]+1,pos[1]), export)
    if pos[1] > 0 and m[pos[0]][pos[1]-1] == 0 and (pos[0],pos[1]-1) not in route:
        maze(m, n, route[:], (pos[0],pos[1]-1), export)
    ________________________________;

m = [
    [1,1,1,0,1,1,1,1,1,1], 
    [1,0,0,0,0,0,0,0,1,1], 
    [1,0,1,1,1,1,1,0,0,1], 
    [1,0,1,0,0,0,0,1,0,1], 
    [1,0,1,0,1,1,0,0,0,1], 
    [1,0,0,1,1,0,1,0,1,1], 
    [1,1,1,1,0,0,0,0,1,1], 
    [1,0,0,0,0,1,1,1,0,0], 
    [1,0,1,1,0,0,0,0,0,1], 
    [1,1,1,1,1,1,1,1,1,1]]
maze(m, len(m), list(), (0,3), (7,9))
```

出处:

https://edu.csdn.net/practice/25949964

代码:

def maze(m, n, route, pos, export):
    """走迷宫
    m       - 迷宫数组,列表
    n       - 迷宫阶数
    route   - 可能的路线,列表
    pos     - 当前位置,元组
    export  - 出口位置,元组
    """
    route.append(pos)
    if pos == export:
        print(route)
    if pos[0] > 0 and m[pos[0]-1][pos[1]] == 0 and (pos[0]-1,pos[1]) not in route:
        maze(m, n, route[:], (pos[0]-1,pos[1]), export)
    if pos[0] < n-1 and m[pos[0]+1][pos[1]] == 0 and (pos[0]+1,pos[1]) not in route:
        maze(m, n, route[:], (pos[0]+1,pos[1]), export)
    if pos[1] > 0 and m[pos[0]][pos[1]-1] == 0 and (pos[0],pos[1]-1) not in route:
        maze(m, n, route[:], (pos[0],pos[1]-1), export)
    if pos[1] < n-1 and m[pos[0]][pos[1]+1] == 0 and (pos[0],pos[1]+1) not in route:
        maze(m, n, route[:], (pos[0],pos[1]+1), export)

if __name__ == '__main__':
    m =[[1,1,1,0,1,1,1,1,1,1], 
        [1,0,0,0,0,0,0,0,1,1], 
        [1,0,1,1,1,1,1,0,0,1], 
        [1,0,1,0,0,0,0,1,0,1], 
        [1,0,1,0,1,1,0,0,0,1], 
        [1,0,0,1,1,0,1,0,1,1], 
        [1,1,1,1,0,0,0,0,1,1], 
        [1,0,0,0,0,1,1,1,0,0], 
        [1,0,1,1,0,0,0,0,0,1], 
        [1,1,1,1,1,1,1,1,1,1]]
    maze(m, len(m), list(), (0,3), (7,9))

输出:

[(0, 3), (1, 3), (1, 4), (1, 5), (1, 6), (1, 7), (2, 7), (2, 8), (3, 8), (4, 8), (4, 7), (5, 7), (6, 7), (6, 6), (6, 5), (6, 4), (7, 4), (8, 4), (8, 5), (8, 6), (8, 7), (8, 8), (7, 8), (7, 9)]


3. 体操比赛成绩统计

体操比赛成绩统计。多名运动员,多个评委打分,去掉一个最高分和去掉一个最低分,对其余分数求平均分作为一个运动员成绩。

编程通过键盘输入每位运动员编号和每个评委的成绩,求出运动员的最终成绩,并将运动员编号和最终成绩保存在一个字典中,形如{编号1:最终成绩1,学号2:最终成绩2.....,并将结果输出。

出处:

https://edu.csdn.net/practice/25949965

代码:

t = int(input('请输入评委人数(不得少于3人):'))
s = int(input('请输入学生人数(不得少于1人):'))
stus = []
for i in range(s):
    stu = {'score':[]}
    stu.update({'sn':str(input('----\n请输入学生学号:'))})
    for j in range(t):
        stu['score'].append(input('请输入评委'+str(j+1)+'的评分:'))
    stu['score'].sort()
    stu.update({'min':stu['score'].pop(0)})
    stu.update({'max':stu['score'].pop()})
    stu.update({'avg':eval('+'.join(stu['score']))/len(stu['score'])})
    stus.append(stu)
r = {n['sn']:n['avg'] for n in stus}
print(r)

输出:


🌟 每日一练刷题专栏 🌟

持续,努力奋斗做强刷题搬运工!

👍 点赞,你的认可是我坚持的动力! 

🌟 收藏,你的青睐是我努力的方向! 

评论,你的意见是我进步的财富!  

 主页:https://hannyang.blog.csdn.net/文章来源地址https://www.toymoban.com/news/detail-418778.html

Python每日一练(20230419)

Golang每日一练 专栏

Python每日一练(20230419)

Python每日一练 专栏

Python每日一练(20230419)

C/C++每日一练 专栏

Python每日一练(20230419)

Java每日一练 专栏

到了这里,关于Python每日一练(20230419)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • python每日一练(4)

      🌈write in front🌈 🧸大家好,我是Aileen🧸.希望你看完之后,能对你有所帮助,不足请指正!共同学习交流. 🆔本文由Aileen_0v0🧸 原创 CSDN首发🐒 如需转载还请通知⚠️ 📝个人主页:Aileen_0v0🧸—CSDN博客 🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝​ 📣系列专栏:Aileen_

    2024年02月08日
    浏览(31)
  • Python每日一练(20230427)

    目录 1. 三数之和  🌟🌟 2. 编辑距离  🌟🌟🌟 3. 翻转字符串里的单词  🌟🌟 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Python每日一练 专栏 C/C++每日一练 专栏 Java每日一练 专栏 给你一个包含  n  个整数的数组  nums ,判断  nums  中是否存在三个元素  a,b,c ,

    2024年02月01日
    浏览(29)
  • python每日一练(9)

       🌈write in front🌈 🧸大家好,我是Aileen🧸.希望你看完之后,能对你有所帮助,不足请指正!共同学习交流. 🆔本文由Aileen_0v0🧸 原创 CSDN首发🐒 如需转载还请通知⚠️ 📝个人主页:Aileen_0v0🧸—CSDN博客 🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝​ 📣系列专栏:Ailee

    2024年02月07日
    浏览(34)
  • Python每日一练(20230430)

    目录 1. 移除元素  🌟 2. 删除排序链表中的重复元素  🌟 3. 搜索旋转排序数组 II  🌟🌟 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Python每日一练 专栏 C/C++每日一练 专栏 Java每日一练 专栏 给你一个数组  nums   和一个值  val ,你需要 ​ 原地 ​ 移除所有数值等于 

    2024年02月02日
    浏览(31)
  • python每日一练(7)

      🌈write in front🌈 🧸大家好,我是Aileen🧸.希望你看完之后,能对你有所帮助,不足请指正!共同学习交流. 🆔本文由Aileen_0v0🧸 原创 CSDN首发🐒 如需转载还请通知⚠️ 📝个人主页:Aileen_0v0🧸—CSDN博客 🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝​ 📣系列专栏:Aileen_

    2024年02月08日
    浏览(47)
  • Python每日一练(20230415)

    目录 1. 路径总和 II  🌟🌟 2. 两数相除  🌟🌟 3. 不同的二叉搜索树 II  🌟🌟 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Python每日一练 专栏 C/C++每日一练 专栏 Java每日一练 专栏 给你二叉树的根节点  root  和一个整数目标和  targetSum  ,找出所有  从根节点到叶子节

    2023年04月16日
    浏览(48)
  • Python每日一练(20230502)

    目录 1. 被围绕的区域  🌟🌟 2. 两数之和 II  🌟 3. 二叉树展开为链表  🌟🌟 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Python每日一练 专栏 C/C++每日一练 专栏 Java每日一练 专栏 给你一个  m x n  的矩阵  board  ,由若干字符  \\\'X\\\'  和  \\\'O\\\'  ,找到所有被  \\\'X\\\'  围绕的

    2024年02月02日
    浏览(38)
  • Python每日一练(20230408)

    目录 1. 两数相除  🌟🌟 2. 分割回文串  🌟🌟 3. x 的平方根  🌟 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Python每日一练 专栏 C/C++每日一练 专栏 Java每日一练 专栏 给定两个整数,被除数  dividend  和除数  divisor 。将两数相除,要求不使用乘法、除法和 mod 运算符。

    2024年02月02日
    浏览(42)
  • Python每日一练(20230420)

    目录 1. 数组逐位判断  🌟 2. 交错字符串  🌟🌟 3. 二进制求和  🌟 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Python每日一练 专栏 C/C++每日一练 专栏 Java每日一练 专栏 比如有以下数组: a1: 1,0,0,1,0,0,0,1 a2: 0,0,0,0,1,1,1,1 a3: 0,1,0,1,0,1,0,0 a4: 1,0,1,1,1,1,0,0 a5: ....... 抓取三个数

    2023年04月20日
    浏览(37)
  • python每日一练(5)

       🌈write in front🌈 🧸大家好,我是Aileen🧸.希望你看完之后,能对你有所帮助,不足请指正!共同学习交流. 🆔本文由Aileen_0v0🧸 原创 CSDN首发🐒 如需转载还请通知⚠️ 📝个人主页:Aileen_0v0🧸—CSDN博客 🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝​ 📣系列专栏:Ailee

    2024年02月08日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包