圆桌:满足客人空座需求,准备最少的椅子,合理安排客人入座圆桌

CSDN周赛第30期第四题算法解析。


(本文获得CSDN质量评分【90】)

【学习的细节是欢悦的历程】

  • Python 官网:https://www.python.org/

  • Free:大咖免费“圣经”教程《 python 完全自学教程》,不仅仅是基础那么简单……

    地址:https://lqpybook.readthedocs.io/


  自学并不是什么神秘的东西,一个人一辈子自学的时间总是比在学校学习的时间长,没有老师的时候总是比有老师的时候多。
            —— 华罗庚


  • My CSDN主页、My HOT博、My Python 学习个人备忘录
  • 好文力荐、 老齐教室
等风来,不如追风去……


CSDN周赛第30期第四小题
圆 桌
(算——法——解——析)


本文质量分:

90
本文地址: https://blog.csdn.net/m0_57158496/article/details/129435473

CSDN质量分查询入口:http://www.csdn.net/qc


目 录

  • ◆圆桌
    • 1、题目描述
    • 2 、应考代码
    • 3、解题算法解析
      • 3.1 算法分析
      • 3.2 实现题目示例
      • 3.3 修正“同桌分拣”缺陷
      • 3.3 客人左右不等空座的“迷茫”
    • 4、 我对题目描述的疑惑
    • 5、完整源码


◆圆桌


1、题目描述


【CSDN周赛第30期第四题】

题目 4/4 (25 分)
题目名称:圆桌
时间限制:1000ms内存限制:256M

  有N个客人与足够多张的圆桌。主人安排每位客人坐在一个圆桌边,但是每位客人希望自己左右边上分别有一些空座位,不然会觉得害羞。注意,如果一个客人所在的圆桌只有他一个人,那么他左边的空座位数量就是他右边的空座位数量。 试问主人需要准备多少个座位,才能让每个客人舒适的坐下。

输入描述:
  第一行输入一个整数N,(1<=N<=10000),代表客人的数量 接下来N行,每行两个整数li与ri,(1<=i<=N,1<=li<=ri<=1000000000) 代表第i位客人希望左边有li个空座位,右边有ri个空座位。

输出描述:
  输出一个整数,代表主人需要准备的最少座位数量。

样例1
输入
3
1 1
1 1
1 1

输出
6

样例2
输入
4
1 2
2 1
3 5
5 3

输出
15

提示
【样例解释】3个人围成一桌,每人左右各一个空位置,一共3个空座位。一个共需要3+3=6座位。


2 、应考代码


应考答题截屏图
在这里插入图片描述

  应试时,我连题目都没有理清,所以写出了“不知所云”的代码。


回页目录

3、解题算法解析


3.1 算法分析

  首先,要分析哪些客人可以坐一个圆桌,从输入数组分拣出可以坐一桌的客人。再依同桌客人空座信息数组计算所用空座。所有圆桌的空座总数加上客人数,即为所要准备的椅子数。

如示例1:

输入
3
1 1
1 1
1 1

  三个客人左右空座相同,都是1,可以共坐一桌空座需3个,3+3=6,6即是所需准备的椅子总数。

输出
6

3.2 实现题目示例


统计分拣可以同桌的客人
while lis: # 统计同桌客人。tem = [lis[0]]l, r = lis[0]lis.pop(0)for i in lis[:]: # 这里一定要遍历用切片复制lis[:],因为lis可能“动态”变短。li, ri = iif li == r:                tem.append(i)lis.remove(i)r = r


  同桌客人,前一个右边的空座即是后一个客人左边的空座,最后一个客人右边的空座即是第一个客人左边的空座。所以,同桌空座总数即为所有客人右边的空座和。

计算每张圆桌空座:用列表解析出每个客人右边的空座数,用sum()求和。

for i in temp: # 遍历客人分桌列表,计算同桌客人共用空座。result += sum(j[1] for j in i)

代码运行效果
在这里插入图片描述
空座1、1、1 + 3人 = 6

在这里插入图片描述
空座(2、1 + 5、3) + 4人 = 15

  可以正确输出题目示例,看似完成了代码编写,代码实则是有缺陷的,我们换种输入试试:
在这里插入图片描述
在这里插入图片描述

  很显然,代码误把能挨个坐成一排,但不却不可以围坐一张圆桌的客人硬拉一起计算共用空座,得到错误的输出。

3.3 修正“同桌分拣”缺陷


  加入同桌分拣检验判定:从最后一个客人开始判定,不可以与首位客人相邻围坐,将该客人数组退回未分拣客人空座信息数组,循环“操作”,直到仅剩一个客人(客人独坐)。

while len(tem) > 1:l_start, ri = tem[-1][1], tem[0][0]if ri == l_start:break # 客人空座链能首尾相接围坐一桌,退出检验循环。else: # 否则,把最后一位客人退回客人空座信息列表lis。lis.append(tem.pop())

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
  经多组输入数据验证,代码可以正确“分桌”了。🤪


回页目录

3.3 客人左右不等空座的“迷茫”


  “注意,如果一个客人所在的圆桌只有他一个人,那么他左边的空座位数量就是他右边的空座位数量。”题目描述中的这句话就是说,任何空座需求的客人,如独围一桌,自成一圈,客人的左边也就是他自己的右边。示例1好理解,仍然是6 (每桌空座([1] × 3 + 3)。因为其左右空座会连在一起,不会违背“他左边的空座位数量就是他右边的空座位数量”。
  示例2,如分4桌坐,前两位客人的空座是2呢还是1呢?后二位是3还是5哩?


在这里插入图片描述

代码

if len(i) == 1:result += max(i[0])continue

  于是我基于个人想法,当一个客人独坐一桌时,li = ri,我用max()取(li, ri)较大值来计算空座。如输入:3, [(1, 1), (3, 4), (5, 7)],三人都独坐一桌,空座1 + 4 + 7 = 12,12 + 3 = 15。

在这里插入图片描述

  但这样子的“操作”,是和题目描述
注意,如果一个客人所在的圆桌只有他一个人,那么他左边的空座位数量就是他右边的空座位数量。”不对付的。😣

  到底该怎么办?请有心的阅读者在评论区留言探讨。


回页目录

4、 我对题目描述的疑惑


对本题目描述中,我有两点疑虑:
  • “1<=li<=ri<=1000000000”条件限定

   样例2的输入,就不满足 li <= ri 啊!

  • “注意,如果一个客人所在的圆桌只有他一个人,那么他左边的空座位数量就是他右边的空座位数量。 ”

   对于这段描述,对于 li != ri 的客人需求,该如何让客人“舒适就坐”?


回页目录

  

5、完整源码

#!/sur/bin/nve python 
# coding: utf-8'''CSDN周赛第30期第04题:圆桌'''#04 圆桌def table(n, lis):''' 计算桌数和需准备座位数 '''result = 0 # 需求空座位数初值。temp = [] # 相同空座需求客人统计列表初始化。while lis: # 统计同桌客人。tem = [lis[0]]l, r = lis[0]lis.pop(0)for i in lis[:]: # 这里一定要遍历用切片复制lis[:],因为lis可能“动态”变短。li, ri = iif li == r:                tem.append(i)lis.remove(i)r = riwhile len(tem) > 1:l_start, ri = tem[-1][1], tem[0][0]if ri == l_start:break # 客人空座链能首尾相接围坐一桌,退出检验循环。else: # 否则,把最后一位客人退回客人空座信息列表lis。lis.append(tem.pop())temp.append(tem)print(f"\n{'':~^50}\n客人分桌信息数组:\n{temp}\n{'':~^50}")for i in temp: # 遍历客人分桌列表,计算同桌客人共用空座。if len(i) == 1:result += max(i[0])continueresult += sum(j[1] for j in i)return len(temp), result + n # 返回客人桌数和需准备的椅子总数(空座数+客人数)。if __name__ == '__main__':n = int(input('\n输入:\n'))lis = [tuple(map(int, input().strip().split())) for i in range(n)]t = table(n, lis)print(f"\n输出:\n{t[1]}\n\n客人需坐{t[0]}桌,共要准备{t[1]}个椅子。")

回页首

__上一篇:__ re.findall获取CSDN博文阅读点赞收藏和评论实时数据(学用curl命令获取博文页面源码,学不会爬虫先手剥CSDN博文阅读点赞收藏和评论实时数据。)
__下一篇:__ 

我的HOT博:

    • New:ChatGPT初体验(ChatGPT国内镜像站初体验,聊天、Python代码生成。)CSDN质量分92。(30687阅读)
    • 尼姆游戏(彩色文字界面版,\033控制码实现。Linux系统有效。)CSDN质量分xx。(1001阅读)
    • 神奇的 \033 ,让打印出彩(1739阅读)
    • 小炼二维数组(1764阅读)
    • 仿真模拟福彩双色球(2622阅读)
    • Python之魔幻切片(1417阅读)
    • 数列求和a, aa, aaa, ..., aa...aa(n个a)(1729阅读)
    • 个人信息提取(2671阅读)
    • 中文字符命名Python变量和函数(1021阅读)
    • 我的Python学习笔记(1021阅读)
    • 十六进制字符串转Python代码(utf-8字符串转十六进制字符串)(1319阅读)
    • 生成100个随机正整数(2489阅读)
    • 给定字符串提取姓名(字符串、list、re“零宽断言”)(1842阅读)
    • 我的 Python.color() (Python 色彩打印控制)(2370阅读)
    • python清屏(3150阅读)
    • 回车符、换行符和回车换行符(3558阅读)
    • Linux 脚本文件第一行的特殊注释符(井号和感叹号组合)的含义(2301阅读)
    • random.sample()将在python 3.9x后续版本中被弃用(2045阅读)
    • pandas 数据类型之 Series(1809阅读)
    • 聊天消息敏感词屏蔽系统(字符串替换 str.replace(str1, *) )(2332阅读)
    • 练习:银行复利计算(用 for 循环解一道初中小题)(2159阅读)
    • pandas 数据类型之 DataFrame(5932阅读)
    • 班里有人和我同生日难吗?(蒙特卡洛随机模拟法)(2921阅读)
    • Python 续行符(\)“拯救”你的超长语句(1502阅读)
    • Python字符串居中显示(4684阅读)
    • 练习:求偶数和、阈值分割和求差( list 对象的两个基础小题)(2331阅读)
    • 用 pandas 解一道小题(2268阅读)
    • 可迭代对象和四个函数(1752阅读)
    • “快乐数”判断(1847阅读)
    • 罗马数字转换器(构造元素取模)(3157阅读)
    • Hot:罗马数字(转换器|罗生成器)(5783阅读)
    • Hot:让QQ群昵称色变的代码(49777阅读)
    • Hot:斐波那契数列(递归| for )(4719阅读)
    • 柱状图中最大矩形(2348阅读)
    • 排序数组元素的重复起止(1964阅读)
    • 电话拨号键盘字母组合(2170阅读)
    • 密码强度检测器(3124阅读)
    • 求列表平衡点(2498阅读)
    • Hot:字符串统计(4581阅读)
    • Hot:尼姆游戏(聪明版首发)(4135阅读)
    • 尼姆游戏(优化版)(1968阅读)

    • 推荐条件 点阅破千


      回页首


      老齐漫画头像

      精品文章:

      • 好文力荐:齐伟书稿 《python 完全自学教程》 Free连载(已完稿并集结成书,还有PDF版本百度网盘永久分享,点击跳转免费🆓下载。)
      • OPP三大特性:封装中的property
      • 通过内置对象理解python'
      • 正则表达式
      • python中“*”的作用
      • Python 完全自学手册
      • 海象运算符
      • Python中的 `!=`与`is not`不同
      • 学习编程的正确方法

      来源:老齐教室


      回页首

      ◆ Python 入门指南【Python 3.6.3】


      好文力荐:

      • 全栈领域优质创作者——寒佬(还是国内某高校学生)博文“非技术文—关于英语和如何正确的提问”,“英语”和“会提问”是学习的两大利器。

      • 【8大编程语言的适用领域】先别着急选语言学编程,先看它们能干嘛

      • 靠谱程序员的好习惯


      CSDN实用技巧博文:

      • 8个好用到爆的Python实用技巧
      • python忽略警告
      • Python代码编写规范
      • Python的docstring规范(说明文档的规范写法)

    本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/9488.html

    如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

    相关文章

    re.findall获取CSDN博文阅读点赞收藏和评论实时数据

    学用curl命令获取博文页面源码&#xff0c;学不会爬虫先用re.findall手剥CSDN博文阅读点赞收藏和评论实时数据。 (本文获得CSDN质量评分【92】) 【学习的细节是欢悦的历程】 Python 官网&#xff1a;https://www.python.org/ Free&#xff1a;大咖免费“圣经”教程《 python 完…

    GitLab账号初始密码忘记了, 如何重置?

    如果GitLab对接了类似于LDAP这种统一用户管理系统&#xff0c;可以直接在LDAP中修改。 前两天在通过Terraform 部署的GitLab实例中&#xff0c; 初始的账号密码文件/etc/gitlab/initial_root_password是有时效性的&#xff0c; 需要及时获取初始密码然后进行修改。&#xff08;…

    git账号忘记(重置)密码操作

    目录 1、使用场景 2、实践操作 2.1、在Idea环境之中修改 2.2、最有效修改方式(直接修改windows凭据) 3、成果展现 4、总结 5、参考文章 1、使用场景 最近在使用腾讯的coding&#xff0c;搞个自己的演示demo&#xff0c;因为家事及各种原因&#xff1b;有一段时间未动代码…

    chatgpt赋能python:Python实现计算器:从入门到实现

    Python实现计算器&#xff1a;从入门到实现 计算器是计算机科学中最基础并且实用的东西之一。Python作为一种高级编程语言&#xff0c;它可以用于编写一个功能完整的计算器。在本文中&#xff0c;我们将介绍Python如何实现一个简单的、交互式的计算器&#xff0c;通过使用基本…

    chatgpt赋能python:PythonUDF-知道这些你就能轻松实现自己的需求

    Python UDF - 知道这些你就能轻松实现自己的需求 如果你是一名Python开发者&#xff0c;你肯定知道Python的强大和适用性。在数据分析、机器学习和Web应用程序等领域&#xff0c;Python的使用已经成为了常态。Python的一个重要特点是拥有大量的库和框架&#xff0c;这些库和框…

    用python代码实现的算法题

    每天进步一点点&#xff0c;关注我们哦&#xff0c;每天分享测试技术文章 本文章出自【码同学软件测试】 码同学公众号&#xff1a;自动化软件测试 码同学抖音号&#xff1a;小码哥聊软件测试 01 算法题一 面试题&#xff1a;假设有一个字符串&#xff0c;每个英文单词全部都…

    1行Python代码,对话ChatGPT,网友:太方便了

    大家好&#xff0c;这里是程序员晚枫。 最近ChatGPT火爆全球&#xff0c;哪怕你不是程序员&#xff0c;应该也听过他的大名了。 今天我们就来一起体验一下~1行Python代码就够了&#xff01; 上代码 导入poai这个库后&#xff0c;只需要1行代码poai.chatgpt.chat&#xff0c…

    chatgpt赋能python:Python怎么免费用的?

    Python 怎么免费用的&#xff1f; Python 是一种高级编程语言&#xff0c;自带简洁优美的语法和强大的开发库。因此&#xff0c;它成为了各种应用程序、网站和服务的主要编程语言之一。如果你对编程语言有些了解&#xff0c;那么你应该知道 Python 很适合开发各类工具、脚本和…

    比chatgpt稍逊的ai问答网站phind,专用于编写代码

    介绍&#xff1a; Phind智能网站是一款基于人工智能技术的搜索引擎&#xff0c;提供智能搜索、语音搜索、图像搜索等多种搜索方式。Phind智能网站的搜索结果不仅仅是关键词匹配&#xff0c;更是根据用户的搜索习惯和兴趣推荐相关内容&#xff0c;为用户提供更加个性化的搜索体…

    一分钟学会怎么让chatGPT帮你写python代码(含使用地址)

    一分钟学会怎么让chatGPT帮你写python代码&#xff08;含使用地址&#xff09; 我们用chatGPT做一个python的计算器脚本为例 提出需求 1、给定角色定位 2、提出要求 3、提出要求的细节 标题等待片刻&#xff0c;等待chatGPT生成脚本即可 import tkinter as tkclass Calc…

    为什么要学习Python呢?有了 ChatGPT 还有必要学习 python 吗?

    为什么学习Python呢&#xff1f; 学习 Python 的原因有很多&#xff0c;以下是一些常见的原因&#xff1a; 简单易学&#xff1a; Python 是一门易于学习的编程语言&#xff0c;语法简单、清晰明了&#xff0c;可以快速掌握基本的编程概念。应用广泛&#xff1a; Python 是一…

    Python爬取某平台付费文档,确定不来薅羊毛吗?

    导语&#xff1a; 哈喽&#xff0c;哈喽~当代大学生写作业时&#xff0c;emmmm…先看一眼&#xff0c;ok有点印象。 想翻书时&#xff0c;这是第几页&#xff1f;怎么这么干净&#xff0c;是这里吗… 这时“学小易”就很友好了&#xff0c;但是唯一不足的一点是&#xff0c;…

    chatgpt赋能python:Python是否需要付费?

    Python是否需要付费&#xff1f; Python是一种高级动态编程语言&#xff0c;文件以.py为扩展名。它具有广泛的应用&#xff0c;包括构建网站、数据分析和科学计算等领域。Python是一种免费开源软件&#xff0c;在大多数情况下不需要任何费用。然而&#xff0c;在某些情况下&am…

    python算法面试题(一)

    1、给定一个包含红色、白色和蓝色、共n 个元素的数组nums&#xff0c;原地对它们进行排序&#xff0c;使得相同颜色的元素相邻&#xff0c;并按照红色、白色、蓝色顺序排列。 我们使用整数 0、1 和 2 分别表示红色、白色和蓝色&#xff1b;必须在不使用库的sort函数的情况下解决…

    实用版ChatBing论文阅读助手教程+新测评

    实用版ChatBing论文阅读助手新测评 AI进化&#xff08;更新&#xff09;的速度太快了&#xff01;距离我上次的【Chat嘴硬&#xff01;基于NewBing的论文调研评测报告】&#xff0c;才四天&#xff0c;它已经进化到快能用的地步了&#xff01; 这次是我刷B站看到热门推荐&…

    ChatGPT与Midjourney:用AI在Youtube和抖音上疯狂传播

    释放被动收入和病毒式增长:2023年利用人工智能、YouTube短片、抖音、ChatGPT和Midjourney的力量&#xff0c;解锁被动收入和。病毒式增长:2023年利用人工智能、YouTube短片、抖音、ChatGPT和Midjourney的力量。你渴望挖掘YouTube短片和抖音的病毒潜力吗&#xff1f;想利用ChatG…

    电脑使用代理连接,关掉代理之后连接不了网络的解决方法

    关掉IP代理之后&#xff0c;IE浏览器代理状态还在&#xff0c;没有取消。需要取消的话&#xff0c;方法是点击IE浏览器上面的工具选项&#xff0c;如果是IE9及以上的版本&#xff0c;点击IE浏览器右上角的小齿轮图标。 具体的操作是&#xff1a;工具-Internet选项-连接-局域网设…

    Huggingface的from pretrained的下载代理服务器方法设置

    笔者需要用到下载预训练模型&#xff0c;但是此时TUNA和BSFU的镜像已经停止了&#xff0c;希望有可用的途径下载到位于网上的预训练模型。 此时查找了huggingface的文档Configuration 根据文档&#xff0c;该参数proxies (Dict, optional) A dictionary of proxy servers to …

    内网服务器设置代理访问外网

    内网服务器设置代理访问外网 背景 首先需要两台云服务器&#xff0c;其中服务器A无公网IP&#xff0c;服务器B有公网IP。 AB公网IP/110.40.255.180内网IP172.17.64.11172.17.64.17 配置A代理 直接配置环境变量即可。 cd /etc/profile.d/ vim proxy.sh进入proxy.sh文件后&…

    HttpClient内外访问外网,添加代理(二)

    HttpClient内外访问外网&#xff0c;添加代理&#xff08;二&#xff09; 问题背景HttpClient工具类调用url实例&#xff0c;附源码&#xff08;一&#xff09;HttpClient内外访问外网&#xff0c;添加代理&#xff08;二&#xff09; 项目搭建Lyric&#xff1a; 你已走得很远 …