CSDN编程题-每日一练(2023-08-26)

news2024/9/23 21:25:46

CSDN编程题-每日一练(2023-08-26)

  • 一、题目名称:排查网络故障
  • 二、题目名称:贪食四人帮
  • 三、题目名称:阿波罗的魔力宝石

一、题目名称:排查网络故障

时间限制:1000ms内存限制:256M

题目描述:

A地跟B地的网络中间有n个节点(不包括A地和B地),相邻的两个节点是通过网线连接。正常的情况下,A地和B地是可以连通的,有一天,A地和B地突然不连通了,已知只有一段网线出问题(两个相邻的节点)小明需要排查哪段网线出问题。他的排查步骤是: 1。 选择某个中间节点 2。 在这个节点上判断跟A地B地是否连通,用来判断那一边出问题 请问小明最少要排查多少次,才能保证一定可以找到故障网线。

输入描述:

一个正整数 n (n <= 10^18),表示A地和B地之间的节点数。

输出描述:

输出一个数字,代表保证一定可以找到故障网线的前提下,小明最少要排查多少次?

🚩示例:

✔️示例1
输入
2

输出
2

🔔 解题思路:

假设节点数为n,我们可以将整个网络划分为两半,即左边的节点和右边的节点。如果某个节点被选为判断节点,那么它所在的位置就决定了是哪一半出了问题。

对于一个给定的节点数n,首先找到最接近n的2的幂次方m,使得m <= n。然后,排查的次数就是最接近n的2的幂次方的对数log2(m)。

首先观察题目中的连接方式,可以发现节点数n与排查次数node_number之间存在一定的关系。

1、假设排查次数为x,那么排查的节点个数应为2^x - 1。
2、当排查的节点个数超过了n时,即2^x - 1 > n,说明排查次数为x-1时已经可以确定故障网线的位置。
3、根据以上思路,可以用循环不断将n除以2,直到n小于等于0为止,每次循环时check_number 加1。
4、最后输出check_number 即为所求的最少排查次数。

代码1如下:

##A地和B地之间的节点数n
n = int(input())
##计数器check_number , 排查次数
check_number = 0
##当n大于0时,执行循环体
while n > 0:
##将n除以2,结果赋值给n,相当于将节点数减半,直到n小于等于0为止
    n = n // 2
###每次循环时,将check_number 加1
    check_number += 1
###输出check_number即为所求的最少排查次数
print(check_number)

在这里插入图片描述

代码2如下:

🔔 解题思路:

首先,我们需要找到一个节点,通过判断这个节点是否与A地和B地连通,来确定故障网线是在节点的哪一边。

假设A地和B地之间有n个节点,我们可以将节点数n表示成二进制形式。例如,n=2时,二进制为10,表示有两个节点。

我们观察一下,当节点数为2的幂次方时,排查次数最少。例如,n=2时,只有节点2需要排查;n=4时,只有节点4需要排查;n=8时,只有节点8需要排查,以此类推。

因此,我们可以先找到节点数n的二进制表示中最高位的1的位置,记为highest_bit_pos。然后,我们构造一个掩码mask,将最高位1右边的所有位都置为1。再将节点数n与掩码mask进行或运算,得到masked_n。

最后,我们统计masked_n中1的个数,即为小明最少要排查的次数。

n = int(input())

# 1、找到最高位1的位置,即二进制字符串的长度减去3,
###  如: bin(2)的结果是字符串'0b10'。长度为4,这表示二进制数2的二进制表示形式为10。前缀0b表示这是一个二进制数,最高位为1
highest_bit_pos = len(bin(n)) - 3

# 2、将最高位1右边的所有位都置为1
##使用左移运算符<<将1左移highest_bit_pos个位数,然后减去1,生成一个二进制数,其中最高位1的右边都是1,其余位为0。这个二进制数被赋值给变量mask
mask = (1 << highest_bit_pos) - 1

##3、按位或运算符|将n与mask进行按位或操作
###将masked_n的最高位1右边的所有位都置为1,而其余位与n保持相同
masked_n = n | mask

# 4、计算1的个数
##将masked_n转换为二进制字符串,然后使用count()函数计算其中字符'1'的个数
count = bin(masked_n).count('1')

#5、输出count,即masked_n中1的个数
print(count)

🔔 示例输入解释:

例如,当输入为2时,输出为2。解释:

1、节点数n为2,二进制表示为10。
2、找到最高位1的位置为1,即highest_bit_pos=1。
3、构造掩码mask,将最高位1右边的所有位都置为1,即mask=1。
4、将节点数n与掩码mask进行或运算,得到masked_n=3。
5、统计masked_n中1的个数,即为小明最少要排查的次数,即count=2。

在这里插入图片描述

二、题目名称:贪食四人帮

时间限制:1000ms内存限制:256M

题目描述:

已知等比数列前4项,首项为a,公比为q。 前四项分别是a,aq,aqq,aqqq。 现在一直只存在n个组合方案。 请问n种方案中,方案中包含的最大值是多少?

输入描述:

输入整数n.(1<=n<=1e15)

输出描述:

输出答案,不存在满足的情况输出”-1”。

🚩示例:

✔️示例1

输入
8

输出
54

代码如下:

n = int(input())

if n == 1:
    max_value = 1
elif n >= 4:
    max_value = 2 ** 3 if n == 4 else -1
else:
    max_value = -1

print(max_value)

在这里插入图片描述

三、题目名称:阿波罗的魔力宝石

时间限制:1000ms内存限制:256M

题目描述:

在希腊神话中,有一个神祗阿波罗。阿波罗拥有一枚能够使人变得更加聪明的神奇宝石。但是,这枚宝石的魔力被封印在了一个混乱的顺序中,你需要通过排序的方法才能拥有这枚宝石的魔力。 给定一个长度为 N N N 的整数数组 A A A,请你将数组 A A A 中的元素进行冒泡排序。

输入描述:

第一行包含整数 N N N。 第二行包含 N N N 个整数,表示数组 A A A

输出描述:

输出 N N N行,每行包含一个整数,表示排序后的数组 A A A

🚩示例:

✔️示例1
输入
5
2 5 3 1 4

输出
1
2
3
4
5

🔔 解题思路:

使用冒泡排序:

冒泡排序是一种基本的排序算法。它重复地遍历要排序的数组,每次比较相邻的两个元素并交换位置,直到整个数组有序。

解题思路:

根据题目描述,需要使用冒泡排序算法对给定的整数数组A进行排序。冒泡排序的基本思想是通过相邻元素的比较和交换来实现排序。

冒泡排序的具体步骤如下:
1、从第一个元素开始,依次比较相邻的两个元素,如果前一个元素大于后一个元素,则交换它们的位置。
2、继续向后遍历,进行相邻元素的比较和交换,直到达到倒数第二个元素。
3、重复以上步骤,每次遍历都将最大的元素“冒泡”到未排序部分的最后位置。
4、重复上述步骤多次,直到整个数组有序为止。

使用双重循环实现冒泡排序:
1、外层循环控制遍历次数,共需遍历N-1次(N为数组长度)。
2、内层循环用于比较相邻元素并进行交换,每次遍历只需比较相邻的前后两个元素。
3、每完成一次内层循环,最大的元素就会“冒泡”到未排序部分的最后位置。
4、最终得到排序后的数组A,按照顺序逐行输出即可。

代码1如下:

N = int(input())  # 读取整数N,表示数组长度
# 读取整数数组A,使用split()方法将输入字符串分割成多个子字符串,并将每个子字符串转换为整数,再将它们组成一个列表。
A = list(map(int, input().split()))  

# 冒泡排序,使用冒泡排序算法对数组A进行排序
## 通过双重循环进行冒泡排序:
## 1、外层循环 for i in range(N-1) 控制遍历次数,从0到N-2。
## 2、内层循环 for j in range(N-i-1) 用于比较相邻元素并进行交换。
## 3、如果当前元素 A[j] 大于下一个元素 A[j+1],则交换它们的位置,实现升序排序。
for i in range(N-1):
    for j in range(N-i-1):
        if A[j] > A[j+1]:
            A[j], A[j+1] = A[j+1], A[j]

# 按照顺序逐行输出排序后的数组A
for num in A:
    print(num)

在这里插入图片描述

代码2如下:

#include <stdio.h>

void sort(int arr[], int n) {
    for (int i = 0; i < n-1; i++) {
        for (int j = 0; j < n-i-1; j++) {
            if (arr[j] > arr[j+1]) {
                int temp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = temp;
            }
        }
    }
}

int main() {
    int N;
    scanf("%d", &N);  // 读取整数N,表示数组长度
    int A[N];
    for (int i = 0; i < N; i++) {
        scanf("%d", &A[i]);  // 读取整数数组A
    }

    // 冒泡排序
    sort(A, N);

    // 输出排序后的数组A
    for (int i = 0; i < N; i++) {
        printf("%d\n", A[i]);
    }

    return 0;
}

在这里插入图片描述

代码3如下:

#include <iostream>
#include <vector>

void sort(std::vector<int>& arr) {
    int n = arr.size();
    for (int i = 0; i < n-1; i++) {
        for (int j = 0; j < n-i-1; j++) {
            if (arr[j] > arr[j+1]) {
                std::swap(arr[j], arr[j+1]);
            }
        }
    }
}

int main() {
    int N;
    std::cin >> N;  // 读取整数N,表示数组长度
    std::vector<int> A(N);
    for (int i = 0; i < N; i++) {
        std::cin >> A[i];  // 读取整数数组A
    }

    // 冒泡排序
    sort(A);

    // 输出排序后的数组A
    for (int i = 0; i < N; i++) {
        std::cout << A[i] << "\n";
    }

    return 0;
}

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一文彻底告别 C盘 红色风景线

前言 想必使用 Windows 的用户肯定遇到过 C盘 爆满的问题吧&#xff0c;感觉平时我们也没有怎么使用 C盘 &#xff0c;但是 C盘 却总是慢慢成长&#xff0c;最后留给我们的就是一道靓丽的红色风景线。不过不用担心&#xff0c;相信读完本文后&#xff0c;在座的各位都可以永久…

精选6个C++项目,推荐新人练手首选!

无论做什么项目&#xff0c;在写简历时&#xff0c;最好要整理出项目中的技术点&#xff0c;思考如何跟面试官介绍你的项目&#xff0c;要经得起面试官的提问。项目的话&#xff0c;可以考虑做下面的这几个&#xff1a; 如果你想给自己的简历增加C 项目经验,以下提供一些方向指…

【C++奇遇记】函数模板

&#x1f3ac; 博客主页&#xff1a;博主链接 &#x1f3a5; 本文由 M malloc 原创&#xff0c;首发于 CSDN&#x1f649; &#x1f384; 学习专栏推荐&#xff1a;LeetCode刷题集 数据库专栏 初阶数据结构 &#x1f3c5; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如…

高效PDF校对:释放高质量内容的力量

在数字化世界中&#xff0c;内容是王者。随着企业和个人越来越依赖数字文档进行沟通、分享和创新&#xff0c;我们在PDF中传递的内容的质量变得至关重要。在这里&#xff0c;我们将探索高效的PDF校对如何帮助您释放高质量内容的真正潜力。 超越仅仅是“正确” 当我们谈论PDF校…

MBR400100CT-ASEMI肖特基模块400A 100V

编辑&#xff1a;ll MBR400100CT-ASEMI肖特基模块400A 100V 型号&#xff1a;MBR400100CT 品牌&#xff1a;ASEMI 封装&#xff1a;M2 恢复时间&#xff1a;&#xff1e;50ns 正向电流&#xff1a;400A 反向耐压&#xff1a;100V 芯片个数&#xff1a;2 引脚数量&…

Leetcode77. 组合

给定两个整数 n 和 k&#xff0c;返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案。 回溯剪枝 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 class Solution {public List<List<Integer>> combine(int n, i…

展锐A13 Camera Hal dispatch模块流程 --- 上

4月份就知道展锐A13的Camera Hal有大的变动&#xff0c;但是最近一直在做一个MTK的项目&#xff0c;没去看这个新增部分的流程。最近有时间&#xff0c;就把A13上Camera Hal新增的部分流程捋 了一下&#xff0c;过程是痛苦的&#xff0c;但是坚持一遍遍去读代码&#xff0c;在结…

移动,电信,联通流量卡该怎么选?

是电信便宜&#xff0c;移动稳定&#xff0c;还是联通性价比高&#xff1f; ​ 今天&#xff0c;小编从三大流量卡的优缺点方面来讲&#xff0c;教你如何选择流量卡了。 一、移动流量卡 优点&#xff1a;信号好&#xff0c;可以说走到什么地方都有信号。 缺点&#xff1a;资…

Leaflet开发入门

Leaflet开发入门 开发环境配置Leaflet开发库开发移动端Hybrid App或移动Web App 开发环境配置 电子地图已经渗透到O2O、生活服务、出行等领域&#xff0c;传统的GIS也孕育着互联网基因。在国内互联网电子地图领域&#xff0c;百度地图和高德地图较为出色&#xff0c;天地图作为…

js的使用之时间如何定义,窗口加载事件

1.时间如何定义 1.1 date的其他的属性 带出星期几的写法 var arr [星期日,星期一,星期二,星期三,星期四,星期五,星期六,星期天] var day date.getDay(); console.log(arr[day]); 1.2 日期的格式化 1.3 时分秒的写法 固定写法&#xff1a;如果想要写成00:00:00这种形式&am…

阿里云服务器搭建FRP实现内网穿透-P2P

前言 在了解frp - p2p之前&#xff0c;请先了解阿里云服务器搭建FRP实现内网穿透-转发: 文章地址 1、什么是frp - p2p frp&#xff08;Fast Reverse Proxy&#xff09;是一个开源的反向代理工具&#xff0c;它提供了多种功能&#xff0c;包括端口映射、流量转发和内网穿透等。…

cmake 交叉编译应用程序:手动设置链接脚本

前言 在使用 cmake 交叉编译应该应用程序时&#xff0c;好像没有手动设置【链接脚本】&#xff0c;也能正常构建生成 Makefile&#xff0c;并且可以正常 Make 生成需要的 应用程序。 但是有些应用程序&#xff0c;需要手动指定【链接脚本】&#xff0c;比如修改链接地址&#…

五、多表查询-5.自连接

一、语法 二、演示-自连接&#xff08;内连接&#xff09; 【例】查询员工 及其 所属领导的名字&#xff08;managerid&#xff0c;领导也是员工表emp1表中的数据&#xff09; &#xff01;&#xff01;必须起别名&#xff01;&#xff01; ——内连接只查询交集部分的数据 …

微调真香,漫画科技博主竟然在用国产大模型生成系列漫画女主角

有一说一&#xff0c;《微调真香&#xff0c;漫画科技博主竟然在用国产大模型生成系列漫画女主角》不是标题党。 连我也不得不相信&#xff0c;作为“亲爱的数据”创始人&#xff0c;我确实在用人工智能大模型生成自家特有风格的漫画。 市面上&#xff0c;海内外&#xff0c;用…

HAproxy服务及keepalived+haproxy高可用

本节主要学习AHproxy 的概述&#xff0c;安装&#xff0c;调度算法&#xff0c;配置文件&#xff0c;负载均衡&#xff0c;配置syslog日志&#xff0c;keepalivedhaproxy实现高可用。 目录 一、概述 1、简介 2、核心功能 3、关键特性 4、应用场景 二、安装 1.内核配置 …

【附安装包】Marvelous designer12|3D服装设计

软件下载 软件&#xff1a;Marvelous designer版本&#xff1a;12语言&#xff1a;简体中文大小&#xff1a;1.49G安装环境&#xff1a;Win11/Win10/Win8/Win7硬件要求&#xff1a;CPU2.0GHz 内存4G(或更高&#xff09;下载通道①百度网盘丨64位下载链接&#xff1a;https://p…

X(推特)推出招聘平台,马斯克进军招聘领域,欲对标 LinkedIn

8 月 26 日&#xff0c;埃隆・马斯克接手 X&#xff08;推特&#xff09;后&#xff0c;开启了一系列备受争议的变革&#xff0c;并多次在公开场合表示希望将 X 打造成为超级应用&#xff0c;受人瞩目。除了私信中推出了视频聊天和语音聊天功能之外&#xff0c;X 在今天宣布上线…

无涯教程-机器学习 - 数据加载

假设如果要启动ML项目&#xff0c;那么您需要做的第一件事也是最重要的事情是什么?这是无涯教程启动任何ML项目都需要加载的数据。关于数据&#xff0c;对于ML项目&#xff0c;最常见的数据格式是CSV(逗号分隔值)。 基本上&#xff0c;CSV是一种简单的文件格式&#xff0c;用…

网络字节序——TCP接口及其实现简单TCP服务器

网络字节序——TCP接口及其实现简单TCP服务器 文章目录 网络字节序——TCP接口及其实现简单TCP服务器简单TCP服务器的实现1. 单进程版&#xff1a;客户端串行版2. 多进程版&#xff1a;客户端并行版netstat查看网络信息3.多线程版&#xff1a;并行执行log.hpp 守护进程fg、bg s…

BI技巧丨Window应用之同环比

白茶曾介绍过OFFSET可以用来解决同环比的问题&#xff0c;其实微软最近推出的开窗函数WINDOW也可以用来解决同环比。 WINDOW函数基础语法 WINDOW ( from[, from_type], to[, to_type][, <relation>][, <orderBy>][, <blanks>][, <partitionBy>][, &l…