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

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

  • 一、题目名称:影分身
  • 二、题目名称:小鱼的航程(改进版)
  • 三、题目名称:排查网络故障

一、题目名称:影分身

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

题目描述:

已知字符串str。字符串str包含字符’x’,’y’。 如果相邻的两个字符不同,消除两个字符,优先从左边进行消除。 xyyx - > yx ->

输入描述:

输入多个字符。(1<=len<=1e5)

输出描述:

输出最后的分身

🚩 示例:

✔️ 示例1:

输入
xyyyy

输出
yyy

🔔 解题思路:

根据题目描述,我们需要对输入的字符串进行处理,消除相邻的不同字符。优先从左边开始消除。可以使用栈(Stack)数据结构来实现。

代码1如下:

s = input().strip()  # 输入字符串##函数 calc 接受一个字符串参数 s,返回一个字符串作为最后的分身
def calc(s: str) -> str:stack = []  # 初始化一个空栈 stack,用于存储字符for ch in s:  # 遍历输入的字符串s,依次处理每个字符if not stack or ch == stack[-1]:  # 栈为空(not stack)或者当前字符 ch 与栈顶字符相同 (ch == stack[-1])##将当前字符 ch 入栈 (stack.append(ch))stack.append(ch)else:  ##  如果栈不为空,并且当前字符 ch 与栈顶字符不同,说明找到了一对相邻不同的字符,将栈顶字符出栈 (stack.pop())stack.pop()##遍历完整个字符串后,栈中剩余的字符即为最后的分身
##使用 join 函数将栈中的字符按照出栈顺序组合起来,返回结果return ''.join(stack) result = calc(s)  # 消除相邻的不同字符
print(result)  # 输出最后的分身

在这里插入图片描述

代码2如下:

#include <iostream>
#include <stack>
#include <string>##定义一个名为 calc的函数,接受一个常量引用字符串作为参数,并返回一个字符串。
std::string calc(const std::string& s) {std::stack<char> stack; #声明一个字符栈 stack,用于模拟栈结构#使用 for 循环遍历输入字符串 s,依次处理每个字符for (char ch : s) {##对于每个字符 ch 进行判断:
##1、如果栈为空(stack.empty())或者当前字符 ch 与栈顶字符相同(ch == stack.top()),将当前字符 ch 入栈(stack.push(ch))。
##2、如果栈不为空,并且当前字符 ch 与栈顶字符不同,说明找到了一对相邻不同的字符,将栈顶元素出栈(stack.pop())if (stack.empty() || ch == stack.top()) {stack.push(ch);} else {stack.pop();}}##使用 for 循环遍历输入字符串 s 中的每个字符 ch。对于每个字符,如果栈为空或者当前字符与栈顶字符相同,将当前字符入栈;否则,说明找到了一对相邻不同的字符,将栈顶元素出栈std::string result; #创建一个空字符串 result,用于保存最后的分身while (!stack.empty()) {  ##使用 while 循环将栈中的字符依次出栈,并将出栈的字符加到 result 的前面result = stack.top() + result;stack.pop();}##最后返回保存最后的分身的字符串 resultreturn result;
}int main() {##声明一个字符串 s,用于存储输入的字符串std::string s;##使用 std::getline 函数从标准输入中获取一行字符串std::getline(std::cin, s);##调用 calc函数处理输入字符串,得到最后的分身,将其赋给字符串变量 resultstd::string result = calc(s);##使用 std::cout 将结果输出到标准输出流,并在末尾添加换行符std::cout << result << std::endl;##程序正常结束return 0;
}

在这里插入图片描述

二、题目名称:小鱼的航程(改进版)

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

题目描述:

有一只小鱼,它上午游泳150公里,下午游泳100公里,晚上和周末都休息(实行双休日),假设从周x(1<=x<=7)开始算起,请问这样过了n天以后,小鱼一共累计游泳了多少公里呢?

输入描述:

输入两个整数x,n(表示从周x算起,经过n天,n在long int范围内)。

输出描述:

输出一个整数,表示小鱼累计游泳了多少公里。

🚩示例:

✔️示例1
输入

3 10

输出
2000

🔔 解题思路:

根据输入的起始天数x和总天数n,计算一定天数内(包括起始天数)游泳的总公里数。

代码1如下:

# 读取输入,起始天数x和经过的天数n
x, n = map(int, input().split())def solution(x, n):#计算出从起始天数开始经过n天后的总天数total_days :total_days = n + x - 1total_days = n + x - 1#计算完整周期(一周)的游泳公里数total_kmtotal_km = total_days // 7 * 250 * 5##计算额外的天数excess_days ,即不足一周的天数excess_days = total_days % 7##循环遍历range(excess_days)来判断每一天是否是工作日(小于5),如果是则将游泳公里数增加250米for i in range(excess_days):if i < 5:total_km += 250
##循环遍历从周一到前一天(range(1, x))的天数,在工作日(小于6)中减去250米的游泳公里数for i in range(1, x):if i < 6:total_km -= 250###计算得到的游泳公里数total_km作为函数的返回值return total_km###调用solution(x, n)
total_km=solution(x, n)
print(total_km)

在这里插入图片描述

代码2如下:

#include <stdio.h>
#include <stdlib.h>#define MAX_SIZE 100## 注意:n在long int范围内
long int solution(long int x, long int n) {long int total_days = n + x - 1;long int total_km = total_days / 7 * 250 * 5;long int excess_days = total_days % 7;for (long int i = 0; i < excess_days; i++) {if (i < 5) {total_km += 250;}}for (long int i = 1; i < x; i++) {if (i < 6) {total_km -= 250;}}return total_km;
}int main() {long int x, n;scanf("%ld %ld", &x, &n);long int total_km = solution(x, n);printf("%ld\n", total_km);return 0;
}

在这里插入图片描述

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

时间限制: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 加1check_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。

在这里插入图片描述

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

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

相关文章

Git gui教程---第八篇 Git gui的使用 创建一个分支

一般情况下一个主分支下代码稳定的情况下会新建出一个分支&#xff0c;然后在分支上修改&#xff0c;修改完成稳定后再合并到主分支上。 或者几个人合作写一份代码&#xff0c;每个人各一个分支&#xff0c;测试稳定再合并到主分支上。 在git gui选择菜单栏“分支”&#xff0…

什么是代码审计?怎么做?

代码审计是对源代码进行人工或自动化审查&#xff0c;以查找潜在的安全漏洞和隐患。在信息安全测试中&#xff0c;代码审计是非常重要的一环。它主要包括以下几个方面&#xff1a; 1.变量验证&#xff1a;检查代码是否对变量进行验证&#xff0c;防止变量被恶意用户篡改。 2.…

板卡设计+硬件每日学习十个知识点(44)23.8.24 (检测单元设计,接口部分设计,板卡电源输入设计,电源检测电路)

文章目录 1.检测单元介绍&#xff08;使用GD32单片机&#xff09;2.GD32的最小系统板3.GD32的温度监测4.GD32的电压监测和电流监测5.GD32的布线6.接口部分设计7.板卡电源输入设计8.电源检测电路 1.检测单元介绍&#xff08;使用GD32单片机&#xff09; 答&#xff1a; 首先要为…

Forrester首次面向中国的开源报告:阿里云在云原生领域开源布局最全面

Forrester 于近期发布了《Navigate The Cloud-Native Ecosystem In China, 2023》&#xff0c;报告概述了中国云原生领域的开源项目对构建云原生生态的促进作用&#xff0c;这些开源项目正深刻影响着企业的技术决策者以何种策略拥抱云原生这一现代 IT 基础设施的核心。 报告表…

很干的 Nginx

&#x1f3a8; 前言 本篇文章有些概念性的东西&#xff0c;是结合自己的理解表达出来的&#xff0c;可能有些理解不到位的地方。希望多多指教&#xff0c;谢谢大家。 红包献上 &#x1f9e7;&#x1f9e7;&#x1f9e7;&#x1f9e7;&#x1f9e7;&#x1f9e7;&#x1f9e7;…

深度学习处理文本(NLP)

文章目录 引言1. 反向传播1.1 实例流程实现1.2 前向传播1.3 计算损失1.4 反向传播误差1.5 更新权重1.6 迭代1.7 BackPropagation & Adam 代码实例 2. 优化器 -- Adam2.1 Adam解析2.2 代码实例 3. NLP任务4. 神经网络处理文本4.1 step1 字符数值化4.2 step 2 矩阵转化为向量…

成集云 | 抖店连接器客户静默下单催付数据同步钉钉 | 解决方案

源系统成集云目标系统 方案介绍 随着各品牌全渠道铺货&#xff0c;主播在平台上直播时客户下了订单后不能及时付款&#xff0c;第一时间客户收不到提醒&#xff0c;不仅造成了客户付款率下降&#xff0c;更大量消耗了企业的人力成本和经济。而成集云与钉钉深度合作&#xff0…

STM32--USART串口

文章目录 通信接口串口通信硬件电路电平标准参数时序 USART主要特性框图 数据帧发送器 波特率发生器SWART串口发送与接收工程串口收发数据包 通信接口 通信接口是指连接中央处理器&#xff08;CPU&#xff09;和标准通信子系统之间的接口&#xff0c;用于实现数据和控制信息在不…

创建型(二) - 单例模式

一、概念 单例设计模式&#xff08;Singleton Design Pattern&#xff09;&#xff1a;一个类只允许创建一个对象&#xff08;或者实例&#xff09;&#xff0c;那这个类就是一个单例类。 优点&#xff1a;在内存里只有一个实例&#xff0c;减少了内存的开销&#xff0c;避免…

element ui - el-select获取点击项的整个对象item

1.背景 在使用 el-select 的时候&#xff0c;经常会通过 change 事件来获取当前绑定的 value &#xff0c;即对象中默认的某个 value 值。但在某些特殊情况下&#xff0c;如果想要获取的是点击项的整个对象 item&#xff0c;该怎么做呢&#xff1f; 2.实例 elementUI 中是可…

嵌入式Linux开发实操(十二):PWM接口开发

# 前言 使用pwm实现LED点灯,可以说是嵌入式系统的一个基本案例。那么嵌入式linux系统下又如何实现pwm点led灯呢? # PWM在嵌入式linux下的操作指令 实际使用效果如下,可以通过shell指令将开发板对应的LED灯点亮。 点亮3个LED,则分别使用pwm1、pwm2和pwm3。 # PWM引脚的硬…

谈一谈浏览器与Node.js中的JavaScript事件循环,宏任务与微任务机制

JavaScript中的异步代码 JavaScript是一个单线程非阻塞的脚本语言。这代表代码是执行在一个主线程上面的。但是JavaScript中有很多耗时的异步操作&#xff0c;例如AJAX&#xff0c;setTimeout等等&#xff1b;也有很多事件&#xff0c;例如用户触发的点击事件&#xff0c;鼠标…

浅谈视频汇聚平台EasyCVR视频平台在城市安全综合监测预警台风天气中的重要作用

夏日已至&#xff0c;台风和暴雨等极端天气频繁出现。在城市运行过程中&#xff0c;台风所带来的暴雨可能会导致城市内涝等次生灾害&#xff0c;引发交通瘫痪、地铁停运、管网泄漏爆管、路面塌陷、防洪排涝、燃气爆炸、供热安全、管廊安全、消防火灾等安全隐患&#xff0c;影响…

性能优化——分库分表

1、什么是分库分表 1.1、分表 将同一个库中的一张表&#xff08;比如SPU表&#xff09;按某种方式&#xff08;垂直拆分、水平拆分&#xff09;拆分成SPU1、SPU2、SPU3、SPU4…等若干张表&#xff0c;如下图所示&#xff1a; 1.2、分库 在表数据不变的情况下&#xff0c;对…

【Unity3D赛车游戏】【四】在Unity中添加阿克曼转向,下压力,质心会让汽车更稳定

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;Uni…

C++实现字符串的逆置

目录 C和C的区别 【1】C对C的扩充 【2】C对C的兼容 第一个C程序 【1】hello world 【2】cout标准输出流对象 i&#xff09;介绍 ii&#xff09;运算 iii&#xff09;cout的使用 iv&#xff09;使用cout指定格式的输出 练习&#xff1a;1、输出斐波那契的前10项。 【3】…

《Linux从练气到飞升》No.17 进程创建

&#x1f57a;作者&#xff1a; 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux菜鸟刷题集 &#x1f618;欢迎关注&#xff1a;&#x1f44d;点赞&#x1f64c;收藏✍️留言 &#x1f3c7;码字不易&#xff0c;你的&#x1f44d;点赞&#x1f64c;收藏❤️关注对我真的…

开学需要买哪些电容笔?ipad可以用的手写笔

因为iPad的功能亮眼&#xff0c;让iPad的用户越来越多&#xff0c;并且越来越受欢迎。用来画画、做笔记都很有用&#xff0c;但要是用来看电视、打游戏的话&#xff0c;使用价值就显得低了。如果你不想买一支价格不菲的苹果电容笔&#xff0c;或是只是想要日常用于书写记录&…

【云原生】Docker Cgroups资源控制管理

目录 一、cgroups简介 cgroups有四大功能&#xff1a; 二、cpu时间片的概念 三、对CPU使用的限制 3.1 设置CPU使用率上限 &#xff08;1&#xff09;查看容器的默认CPU使用限制 &#xff08;2&#xff09;进行压力测试 &#xff08;3&#xff09;创建容器时设置CPU使用时…

Linux下套接字TCP实现网络通信

Linux下套接字TCP实现网络通信 文章目录 Linux下套接字TCP实现网络通信1.引言2.具体实现2.1接口介绍1.socket()2.bind()3.listen()4.accept()5.connect() 2.2 服务器端server.hpp2.3服务端server.cc2.4客户端client.cc 1.引言 ​ 套接字(Socket)是计算机网络中实现网络通信的一…