2024年春季学期《算法分析与设计》练习13

问题 A: 菱形图案

[命题人 : admin]

时间限制 : 1.000 sec  内存限制 : 128 MB

提交问题列表

解决: 1041提交量: 2744统计

题目描述

KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的菱形图案。

输入

多组输入,一个整数(2~20)。

输出

针对每行输入,输出用“*”组成的菱形,每个“*”后面有一个空格。每输出一个菱形的后面需要空一行。

样例输入 Copy
2
3
4
样例输出 Copy
  * 
 * * 
* * * 
 * * 
  * 

   * 
  * * 
 * * * 
* * * * 
 * * * 
  * * 
   * 

    * 
   * * 
  * * * 
 * * * * 
* * * * * 
 * * * * 
  * * * 
   * * 
    * 
def solve(n):
    t = n
    for i in range(n + 1):
        print(t * ' ' + '* ' * (i + 1))
        t -= 1
    t = n
    for j in range(1, n + 1):
        print(j * ' ' + t * '* ')
        t -= 1
while True:
    solve(int(input()))
    print()

问题 B: X星人的礼物

[命题人 : admin]

时间限制 : 1.000 sec  内存限制 : 128 MB

提交问题列表

解决: 335提交量: 1241统计

题目描述

六一儿童节到了,X星人宝宝收到了很多很多礼物。他决定把这些礼物装到自己的礼物箱中。为此,他准备了很多个型号相同的礼物箱,每个礼物箱能够装礼物的最大重量都是一样的。但是X星人宝宝不希望在一个礼物箱里面装太多礼物(可能担心礼物会被压坏吧),每个礼物箱最多只允许装2个礼物
假设X星人宝宝收到了N个礼物,现在给出每一个礼物的重量和一个礼物箱的最大装载量,请你编写一个程序计算X星人宝宝最少要用多少个礼物箱才能够把所有的礼物都装完

输入

单组输入。
每组两行,第1行输入两个正整数,分别表示礼物的数量N和每个礼物箱的最大装载量C,其中1<=N<=1000,1<=C<=100,两者之间用英文空格隔开。
第2行输入N个不超过100的正整数,分别表示每一个礼物的重量,两两之间用英文空格隔开。
输入保证最重的礼物的重量<=C。

输出

针对所输出的数据,输出将所有的礼物全部都装完所需的礼物箱的最少个数。

样例输入 Copy
5 80
20 70 40 30 10
样例输出 Copy
3

while True:
    n, c = map(int, input().split())
    arr = list(map(int, input().split()))
    arr.sort()
    ans = 0
    i = 0
    j = n - 1
    while i < j:
        if arr[i] + arr[j] <= c:
            i += 1
            j -= 1
        else:
            j -= 1
        ans += 1
    if i == j:
        print(ans+1)
    else:
        print(ans)

问题 C: 隔离14天

[命题人 : 201501010119]
时间限制 : 1.000 sec  内存限制 : 128 MB

提交问题列表
解决: 1388提交量: 2431统计
题目描述


      现在假定编号为0的乘客冠状病毒核酸检验呈阳性,请编写一个程序统计需隔离的总人数(包括编号为0的乘客)。

输入
第1行的第1个数字n表示总人数,第2个数字m表示汽车数量;从第2行开始,接下来的m行表示每辆汽车的司乘人员总人数和人员编号(人员编号是一个固定值,可以对应于我们的身份证号码),每一行的第1个数字k表示该汽车的司乘人员总数,接下来的k个数字表示每一个人的编号。
输出
需要被隔离的总人数。
样例输入 Copy
<span style="background-color:#ffffff"><span style="color:#333333"><span style="background-color:#ffffff"><span style="color:#333333"><span style="background-color:#f5f5f5">100 4
2 1 2
5 10 13 11 12 14
2 0 1
2 99 2
</span></span></span></span></span>
样例输出 Copy
<span style="background-color:#ffffff"><span style="color:#333333"><span style="background-color:#ffffff"><span style="color:#333333"><span style="background-color:#f5f5f5">4</span></span></span></span></span>

n, m = map(int, input().split())
a = []
for i in range(m):
    a.append(list(map(int, input().split()))[1:])
p = []
q = []
for i in range(m):
    if 0 in a[i]:
        p.append(i)
        q.extend(a[i])
t = 0
i = 0
while True:
    flag = False
    for i in range(m):
        if i not in p and set(q).intersection(a[i]):
            p.append(i)
            q.extend(a[i])
            flag = True
    if not flag:
        break
    t += 1
print(len(set(q)))

问题 D: 最小生成树(Kruskal)

[命题人 : 201501010119]

时间限制 : 1.000 sec  内存限制 : 128 MB

提交问题列表

解决: 1000提交量: 1940统计

题目描述

编程实现Kruskal算法,求图的最小生成树(MST)的权重。

输入

每组数据分为两个部分,第一部分为图的点数n,和边数m, 
第二部分为m行,每一行输入三个数字,前两个为两个顶点的编号,第三个为边权重。 

输出

最小生成树的权重。

样例输入 Copy
3 3
0 1 10
0 2 15
1 2 50
样例输出 Copy
25
while True:
    INF = 1 << 31 - 1
  
  
    def make_set(x):
        par[x] = x
        rank[x] = 0
  
  
    def find_set(x):
        if x != par[x]:
            par[x] = find_set(par[x])
        return par[x]
  
  
    def union_set(x, y, w):
        global sum
        x = find_set(x)
        y = find_set(y)
        if x == y:
            return 0
        if rank[x] > rank[y]:
            par[y] = x
        else:
            if rank[x] == rank[y]:
                rank[y] += 1
            par[x] = y
        sum += w
        return 1
  
  
    n, m = map(int, input().split())
    graph = []
    rank = [0] * m
    par = [0] * m
    for i in range(n):
        x, y, w = map(int, input().split())
        graph.append([x, y, w])
        make_set(i)
    graph.sort(key=lambda x: x[2])
    sum = 0
    for i in range(m):
        res = union_set(graph[i][0], graph[i][1], graph[i][2])
        # if res == 1:
        #     print(*graph[i])
    print(sum)

问题 E: 搭建电路

[命题人 : admin]

时间限制 : 1.000 sec  内存限制 : 128 MB

提交问题列表

解决: 781提交量: 3060统计

题目描述

明明迷上了一个搭建电路的游戏。
在游戏中,每次在两个电子元件之间增加一条有效电路(两个元件之间先前没有电路相连)都将获得相应的积分奖励。
已知电子元件数量n和部分电子元件之间的奖励积分值。如何构建一个有效电路将所有元件全部连接起来,并且可以得到最多的积分奖励。

输入

每组输入数据包含m+1行。
第1行输入两个正整数n和m,其中n表示电子元件数量(n<=100),m表示提供了m对电子元件之间的奖励积分值(m<=1000)。两个正整数之间用空格隔开。
第2行到第m+1行对应m对电子元件及其对应的奖励积分值,每一行包含三个正整数,第1个和第2个整数表示电子元件编号(从1开始),第3个整数表示两个元件之间搭建电路的奖励积分num(num<1e9)。整数之间用空格隔开。

输出

每组输出占1行,输出一个正整数,即最多可以得到的积分奖励值。如果没有办法把所有元件全部连接起来,则输出“No solution.”。

样例输入 Copy
3 3
1 2 10
1 3 20
2 3 30
样例输出 Copy
50

def judge(a, b, c, vis):
    if (a not in vis or b not in vis) and (a in vis or b in vis):
        return 1
    return 0
 
while True:
    n, m = map(int, input().split())
    arr = [list(map(int, input().split())) for _ in range(m)]
    arr.sort(reverse=True, key=lambda x: x[2])
    vis = []
    res = 0
    cnt = 1
    a, b, c = arr.pop(0)
    vis.extend([a, b])
    res += c
    flag = 1
    while cnt < n - 1 and flag:
        flag = 0
        for i in range(len(arr)):
            a, b, c = arr[i]
            if judge(a, b, c, vis):
                vis.append(a) if a not in vis else vis.append(b)
                res += c
                arr.pop(i)
                cnt += 1
                flag = 1
                break
    if flag:
        print(res)
    else:
        print("No solution.")

问题 F: 最小生成树(Prim)

[命题人 : 201501010119]

时间限制 : 1.000 sec  内存限制 : 128 MB

提交问题列表

解决: 1019提交量: 5024统计

题目描述

使用Prim算法求图的最小生成树(MST)

输入

每组数据分为两个部分,第一部分为图的点数n,和边数m,
第二部分为m行,每一行输入三个数字,前两个为两个顶点的编号,第三个为边权重。

输出

最小生成树,输出时按照边的两个端点的升序输出。(先看左端点,再看右端点,端点不换位置)

样例输入 Copy
3 3
0 1 10
0 2 15
1 2 50
样例输出 Copy
0 1 10
0 2 15

def judge(a, b, c, vis):
    if (a not in vis or b not in vis) and (a in vis or b in vis):
        return 1
    return 0
 
 
while True:
    n, m = map(int, input().split())
    arr = []
    for i in range(m):
        arr.append(list(map(int, input().split())))
    arr.sort(key=lambda x: x[2])
    cnt = 1
    vis = []
    res = []
    a, b, c = arr.pop(0)
    vis.extend([a, b])
    res.append([a, b, c])
 
    while cnt < n - 1:
        for i, (a, b, c) in enumerate(arr):
            if judge(a, b, c, vis):
                vis.append(a) if a not in vis else vis.append(b)
                res.append([a, b, c])
                arr.pop(i)
                cnt += 1
                break
 
    res.sort()
    for i in range(len(res)):
        print(*res[i])

问题 G: 台球碰撞

[命题人 : 外部导入]
时间限制 : 1.000 sec  内存限制 : 128 MB

提交问题列表
解决: 29提交量: 88统计
题目描述

在平面直角坐标系下,台球桌是一个左下角在(0,0),右上角在(L,W)的矩形。有一个球心在(x,y),半径为R的圆形母球放在台球桌上(整个球都在台球桌内)。受撞击后,球沿极角为a的射线(即:x正半轴逆时针旋转到此射线的角度为a)飞出,每次碰到球桌时均发生完全弹性碰撞(球的速率不变,反射角等于入射角)。

如果球的速率为vs个时间单位之后球心在什么地方?

输入

输入文件最多包含25组测试数据,每个数据仅一行,包含8个正整数L,W,x,y,R,a,v,s(100<=L,W<=105,1<=R<=5, R<=x<=L-RR<=y<=W-R, 0<=a<360, 1<=v,s<=105),含义见题目描述。L=W=x=y=R=a=v=s=0表示输入结束,你的程序不应当处理这一行。

输出

对于每组数据,输出仅一行,包含两个实数xy,表明球心坐标为(x,y)。xy应四舍五入保留两位小数。

样例输入 Copy
<span style="background-color:#ffffff"><span style="color:#333333"><span style="background-color:#ffffff"><span style="color:#333333"><span style="background-color:#f5f5f5">100 100 80 10 5 90 2 23
110 100 70 10 5 180 1 9999
0 0 0 0 0 0 0 0</span></span></span></span></span>
样例输出 Copy
<span style="background-color:#ffffff"><span style="color:#333333"><span style="background-color:#ffffff"><span style="color:#333333"><span style="background-color:#f5f5f5">80.00 56.00
71.00 10.00</span></span></span></span></span>

import math
 
while True:
    L, W, x, y, R, a, v, s = map(int, input().split())
    if L == W == x == y == R == a == v == s == 0:
        break
    dis = v * s
    re_x = x + dis * math.cos(math.radians(a))
    re_y = y + dis * math.sin(math.radians(a))
    while re_x - R < 0 or re_x + R > L:
        if re_x - R < 0:
            a = 180 - a
            re_x = R + (R - re_x)
        elif re_x + R > L:
            a = 180 - a
            re_x = L - R - (re_x + R - L)
    while re_y - R < 0 or re_y + R > W:
        if re_y - R < 0:
            a = -a
            re_y = R + (R - re_y)
        elif re_y + R > W:
            a = -a
            re_y = W - R - (re_y + R - W)
    print("%.2f" % re_x, "%.2f" % re_y)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[数据集][目标检测]脑肿瘤检测数据集VOC+YOLO格式9787张3类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;9787 标注数量(xml文件个数)&#xff1a;9787 标注数量(txt文件个数)&#xff1a;9787 标注…

基础—SQL—DQL(数据查询语言)聚合函数

一、引言 一般情况下&#xff0c;我们在进行分组查询的时候&#xff0c;一般配合着聚合函数来进行操作&#xff0c;所以先了解和学习聚合函数再学习和操作分组查询。 二、DQL—聚合函数 1、介绍 聚合函数指的是讲一列数据作为一个整体&#xff0c;进行纵向的计算。 2、常见…

VMWare下安装Linux虚拟机(图文)

大家好&#xff0c;在当今科技发展迅速的时代&#xff0c;虚拟化技术在企业和个人用户中变得越来越普遍。VMware作为一款领先的虚拟化软件&#xff0c;为用户提供了在单一物理计算机上运行多个操作系统的能力&#xff0c;为开发、测试和运维等任务提供了便利。在这篇文章中&…

Linux Shell:lsof 命令

Linux Shell&#xff1a;lsof 命令 在 Linux 系统中&#xff0c;lsof&#xff08;list open files&#xff09;命令是一款非常有用的工具。它可以列出当前系统中所有打开的文件&#xff0c;并且还能显示与这些文件相关的进程信息。因为在 Linux 中&#xff0c;一切皆文件&…

汽车IVI中控开发入门及进阶(二十五):CVBS视频流

前言: AHD和CVBS是两种视频格式,在车载摄像头中,有支持传统CVBS模拟视频的摄像头,也有支持新的高分辨率AHD格式的摄像头。 CVBS视频是经典的模拟视频格式,在视频经常显示在小型监视器上的车辆上仍然最受欢迎。如果想要车辆的最大分辨率,可选择AHD格式,即高分辨率模拟视…

生成随机图片

package com.zhuguohui.app.lib.tools;/*** Created by zhuguohui* Date: 2024/6/1* Time: 13:39* Desc:获取随机图片*/ public class RandomImage {// static final String url "https://picsum.photos/%d/%d?random%d";static final String url "https://…

Java进阶学习笔记34——Arrays类

Arrays&#xff1a; 用来操作数组的工具类。 解释说明&#xff1a; 只要知道代码这么写就可以了。 package cn.ensource.d5_arrays;import java.util.Arrays; import java.util.function.IntToDoubleFunction;public class ArraysTest1 {public static void main(String[] arg…

“论软件的可靠性评价”必过范文,突击2024软考高项论文

论文部分 摘要 2023年03月&#xff0c;我参与了某艺术品公司线上拍卖管理平台的研发。该项目的目标是建立一个互联网在线拍卖平台&#xff0c;用户可以通过手机或PC浏览器进入拍卖平台&#xff0c;对喜欢的拍品进行参拍出价。平台提供了在线支付、在线出价、保证金管理、拍品…

docker镜像体积优化攻略参考—— 筑梦之路

简单介绍 镜像的本质是镜像层和运行配置文件组成的压缩包&#xff0c;构建镜像是通过运行 Dockerfile 中的 RUN 、COPY 和 ADD 等指令生成镜像层和配置文件的过程。 和镜像体积大小有关的关键点&#xff1a; RUN、COPY 和 ADD 指令会在已有镜像层的基础上创建一个新的镜像层&…

PolarCTF 2024夏季个人挑战赛 个人WP

【WEB】审计 直接给源码&#xff0c;php特性 秒了&#xff0c;有个特殊的东西 0e215962017&#xff0c;他md5后的值是本身 【WEB】扫扫看 敏感目录flag.php 【WEB】debudao 查看网页源码&#xff08;里面的flag是错的&#xff09; 查看网络 【WEB】ExX? 开题 扫一下&#…

Unity实现拖拽场景中的物体

先看演示效果 实现方案 1.创建几个用于演示的Cube 2.创建一个脚本 3.编写脚本的内容 附上代码片段 float distance;// Update is called once per framevoid Update(){var ray Camera.main.ScreenPointToRay(Input.mousePosition);RaycastHit hit;if (Input.GetMouseButtonDo…

施耐德 BAS PLC 基本操作指南

CPU 型号 项目使用的 PLC 型号为&#xff1a;施耐德昆腾 Quantum 140 CPU 67160 P266 CPU &#xff0c;支持热备冗余&#xff0c;内部存储 1024K&#xff0c;支持 2 个 PCMCIA 扩展卡槽CPU 模块自带接口&#xff1a;MB 串口接口、MB 串口接口、USB 接口、以太网接口&#xff…

网络原理———TCP/IP—网络层IP协议

T04BF &#x1f44b;专栏: 算法|JAVA|MySQL|C语言 &#x1faf5; 今天你敲代码了吗 目录 网络层IP协议4位版本号4位首部长度8位服务类型16位总长度16位标识 3位标志 13位片偏移8位生存时间8位协议16位首部校验和32位源IP地址 和 32位目的IP地址方案1:动态分配IP地址方案2:NAT机…

RabbitMQ怎么保证可靠性

RabbitMQ怎么保证可靠性 前言生产端问题解决方案代码验证 RabbitMQ问题消费端问题解决方案代码验证 总结 前言 RabbitMQ相信大家都非常熟悉了&#xff0c;今天咱们来聊聊怎么保证RabbitMQ的可靠性。 那什么时候会出现问题呢&#xff1f; 第一种是生产端出现的问题。我们向队…

[数据集][目标检测]手枪检测数据集VOC+YOLO格式3000张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;3000 标注数量(xml文件个数)&#xff1a;3000 标注数量(txt文件个数)&#xff1a;3000 标注…

IP代理池是什么?

从事跨境行业的朋友们总会有一个疑问&#xff0c;为什么自己所合作的IP代理商的IP在使用的过程中账号会有莫名封禁的问题&#xff0c;会不会是自己在使用的过程中错误的操作违反了平台的规则&#xff0c;其实不然有可能会是IP代理池纯净度不高的问题&#xff0c;有可能自己在使…

[个人总结]-java常用方法

1.获取项目根路径 user.dir是一个系统属性&#xff0c;表示用户当前的工作目录&#xff0c;大多数情况下&#xff0c;用户的当前工作目录就是java项目的根目录&#xff08;src文件的同级路径&#xff09; System.getProperty("user.dir") 结果&#xff1a;D:\code…

智能报警器——物联网应用创新

一、项目的目的、意义 我国自2020年至11月起共接报火灾23.3万起&#xff0c;亡1335人&#xff0c;伤837人&#xff0c;直接财产损失36.12亿元&#xff0c;其中&#xff0c;因电线短路、过负荷及电气设备故障等电气原因引起的火灾共40481起&#xff0c;占火灾总数的30.7%&#…

【面试经典150题】合并两个有序数组

目录 一.利用库函数sort二.逆双指针 一.利用库函数sort 首先我们先来看下题目的描述&#xff1a; 两个非递减的数组重新排列成非递减顺序到第一个数组中&#xff0c;并且第一个数组已经提前开好了空间。我们完全可以将nums2数组先放进nums1数组后面&#xff0c;然后整体对num…

ChatGPT制作一个简单的客服机器人

包含功能&#xff1a; MVP&#xff08;最简可行产品&#xff09;版本的客服机器人应该聚焦于核心功能&#xff0c;以快速上线和测试用户反馈为目标。以下是一个简化的版本&#xff1a; 自动问答&#xff08;FAQ&#xff09;功能&#xff1a; 支持回答常见问题&#xff0c;例如…