LeetCode刷题计划---day3

卡码网 练习ACM模式 https://kamacoder.com/

11

在这里插入图片描述

可用静态链表存储树,最后求某个结点到共同树根的长度。

#include <iostream>
#include <vector>
using namespace std;



int main()
{
    int n;
    int a,b;
    vector<int> nums = vector<int>(30,0);
    
    while(cin>>n)
    {
        while(n--){
 
            cin>>a>>b;
            nums[a]=b;
        }
            int len_ming = 0;
            int len_yu =0;
            int ming = nums[1];
            int yu = nums[2];
            while(ming !=0){
                ming = nums[ming];
                len_ming++;
            }
            while(yu!=0){
                yu = nums[yu];
                len_yu++;
            }
                
        
        if(len_ming>len_yu)
            cout<<"You are my elder"<<endl;
        else if(len_ming==len_yu)
            cout<<"You are my brother"<<endl;
        else if(len_yu>len_ming)
            cout<<"You are my younger"<<endl;
        }

    
    return 0;
}
while True:
    try:
        n = int(input())
        relations = {}
        for _ in range(n):
            a, b = map(int, input().split())
            relations[a] = b

        len_ming = 0
        len_yu = 0
        ming = relations.get(1, 0)
        yu = relations.get(2, 0)

        while ming != 0 and ming in relations:
            ming = relations[ming]
            len_ming += 1
        while yu != 0 and yu in relations:
            yu = relations[yu]
            len_yu += 1

        if len_ming > len_yu:
            print("You are my elder")
        elif len_ming == len_yu:
            print("You are my brother")
        else:
            print("You are my younger")

    except EOFError:
        break

在访问 relations[ming] 之前,先判断一下 ming 是否在 relations 字典的键中。如果 ming 不在字典中,则说明已经找到了最后一个人,应该跳出循环。


12

在这里插入图片描述

#include <iostream>

int main() {
    int n;
    while (std::cin >> n) {
        // 输出上半部分
        for (int i = 1; i <= n; i++) {
            // 输出前面的空格
            for (int j = 1; j <= n - i; j++) {
                std::cout << " ";
            }
            // 输出左半部分的数字
            for (int j = 1; j <= i; j++) {
                std::cout << j;
            }
            // 输出右半部分的数字
            for (int j = i - 1; j >= 1; j--) {
                std::cout << j;
            }
            // 输出后面的空格和换行符
            std::cout << std::endl;
        }

        // 输出下半部分
        for (int i = n - 1; i >= 1; i--) {
            // 输出前面的空格
            for (int j = 1; j <= n - i; j++) {
                std::cout << " ";
            }
            // 输出左半部分的数字
            for (int j = 1; j <= i; j++) {
                std::cout << j;
            }
            // 输出右半部分的数字
            for (int j = i - 1; j >= 1; j--) {
                std::cout << j;
            }
            // 输出后面的空格和换行符
            std::cout << std::endl;
        }
    }
    return 0;
}


while True:
    try:
        n = int(input().strip())
        # 输出上半部分
        for i in range(1, n+1):
            # 输出前面的空格
            print(" " * (n-i), end="")
            # 输出左半部分的数字
            for j in range(1, i+1):
                print(j, end="")
            # 输出右半部分的数字
            for j in range(i-1, 0, -1):
                print(j, end="")
            # 输出后面的空格和换行符
            print()
        # 输出下半部分
        for i in range(n-1, 0, -1):
            # 输出前面的空格
            print(" " * (n-i), end="")
            # 输出左半部分的数字
            for j in range(1, i+1):
                print(j, end="")
            # 输出右半部分的数字
            for j in range(i-1, 0, -1):
                print(j, end="")
            # 输出后面的空格和换行符
            print()
    except:
        break


13

在这里插入图片描述

#include <iostream>
using namespace std;

int main() {
    char c;
    int n;
    while (cin >> c >> n) {
        if (c == '@') break;

        for (int i = 1; i <= n; i++) {
            if (i == n) {
                for (int j = 0; j < 2 * n - 1; j++) {
                    cout << c;
                }
            } else {
                for (int j = 0; j < 2 * n - 1; j++) {
                    if (j == n - i || j == n + i - 2) cout << c;
                    else cout << " ";
                }
            }

            cout << endl;
        }
        cout<<endl;
    }
   
    return 0;
}

while True:
    
    try:
        s = list(input().split())
        a = s[0]
        n = int(s[1])
     
        if a == '@':
           break
        else:
            for i in range(1,n+1):
                
                if i ==n:
                    print(a*(2*n-1))
                else:
                    for j in range(2*n-1):
                        if (j==n+i-2) or (j==n-i) :
                            print(a,end="")
                           
                        else:
                            print(' ',end="")
                    print()
                            
        print()
        
    except:
        break

Python中的print函数可以通过指定end参数来设置输出结尾字符,默认为换行符“\n”。在输出空格时,应该输出一个空格字符,而不是一个空字符串。


14

在这里插入图片描述

读取 n 后使用 cin.ignore() 来清除缓冲区中的换行符,然后再使用 getline(cin, s) 读取字符串。
cin.ignore(); // 清除换行符

#include <iostream>
#include <string>
#include <sstream>
#include <vector>
using namespace std;

int main() {
    int n;
    cin >> n;
    cin.ignore(); // 清除换行符

    while (n) {
        string s;
        getline(cin, s);

        string abbreviation;
        istringstream iss(s);
        string word;

        while (iss >> word) {
            abbreviation += toupper(word[0]);
        }

        cout << abbreviation << endl;
        n--;
    }

    return 0;
}

使用了一个 istringstream 类型的对象 iss,它可以将字符串按照空格分割成一个个单词。iss >> word 的含义就是从输入流中提取下一个单词,并将其存储到字符串变量 word 中。
在 C++ 中,对于字符串的拼接操作,使用 + 和 += 运算符的区别在于:
使用 + 运算符:

当你使用 s1 = s1 + toupper(word[0]); 这样的表达式时,实际上是创建了一个新的临时字符串,其中包含了将 s1 和 toupper(word[0]) 拼接后的结果,然后将这个新的字符串赋值给 s1。这意味着原始的 s1 字符串会被销毁,而新的字符串会分配内存来存储拼接后的结果。
使用 += 运算符:

当你使用 s1 += toupper(word[0]); 这样的表达式时,它会直接将 toupper(word[0]) 添加到 s1 的末尾,而不会创建新的临时字符串。这种方式更高效,因为它避免了不必要的内存分配和复制操作。

while True:
    try:
        n = int(input())
        for i in range(n):
            s = input().split()
            s1 = ''
            for j in range(len(s)):
               
                s1 = s1+s[j][0]
                
            s_upper = s1.upper()
            print(s_upper)
        
    except:
        break

使用了字符串相加 + 的方式,这会将新的字符添加到已有字符串的末尾,注意前后关系
s.upper() 返回一个新的字符串,其中所有的小写字母都被转换为大写字母s.lower() 返回一个新的字符串,其中所有的大写字母都被转换为小写字母。


15

在这里插入图片描述

在这里插入图片描述

#include <iostream>
using namespace std;

int main()
{
    int n;
    while(cin>>n){
        cin.ignore(); // 忽略换行符
        while(n--){
            string s1;
            string s2;
            getline(cin,s1);
            int len;
            len = s1.length();
            if(len %2!=0)
            {
                break;
            }
            else
            {
                getline(cin,s2);
               
                s1.insert(s1.size()/2,s2);
                cout<<s1<<endl;
            }
            

        }
        
        
    }
    

    
    return 0;
}

使用了 getline(cin, s1) 和 getline(cin, s2) 来读取输入的字符串。但是要注意,当之前使用 cin >> n 读取整数时,输入流中可能会有一个换行符残留在缓冲区中。这个换行符会被 getline 函数读取到,并导致第一个 getline 函数直接返回空字符串。

为了解决这个问题,可以在读取整数后,使用 cin.ignore() 来忽略剩余的换行符,然后再开始读取字符串。

while True:
    
    
    try:
        n = int(input())
        for i in range(n):
            s1 = input()
            s2 = input()
            index = len(s1) // 2  # 计算插入位置
            s1 = s1[:index] + s2 + s1[index:]  # 将 s2 插入到 s1 的中间位置
            print(s1)
    except:
        break

在这里插入图片描述

#include <iostream>
using namespace std;


int main()
{
    
    int n;
    cin>>n;
    cin.ignore();
    while(n>0){
        string s;
        char temp;
        getline(cin,s);
        int len;
        len = s.length();
        for (int i = 0;i<len;i++){
            if(i%2==0)
            {
                temp=s[i];
                s[i]=s[i+1];
                s[i+1]=temp;
            }
           
        
        }
        cout<<s<<endl;
        n--;
    }
    
    
    return 0;
}
while True:
    
    try:
        n = int(input())
        for i in range(n):
            s = list(input())
            for i in range(len(s)):
                temp = ''
                if i%2 ==0:
                    temp = s[i]
                    s[i] = s[i+1]
                    s[i+1] = temp
                    
                    
            print(''.join(s))
        
    except:
        break

在 Python 中,字符串是不可变的(immutable),因此无法通过索引赋值的方式来修改字符串中的单个字符。
使用 list() 函数将输入的字符串转换为列表,并使用 join() 方法将列表转换回字符串

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

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

相关文章

Java IO详解

一、流的概念与作用 流(Stream)&#xff1a; 在Java IO中&#xff0c;流是一个核心的概念。流从概念上来说是一个连续的数据传输过程。人们根据数据传输特性将流抽象为各种类&#xff0c;方便更直观的进行数据操作。你既可以从流中读取数据&#xff0c;也可以往流中写数据。流的…

STM32——OLED菜单

文章目录 一.补充二. 二级菜单代码 简介&#xff1a;首先在我的51 I2C里面有OLED详细讲解&#xff0c;本期代码从51OLED基础上移植过来的&#xff0c;可以先看完那篇文章&#xff0c;在看这个&#xff0c;然后按键我是用的定时器扫描不会堵塞程序,可以翻开我的文章有单独的定时…

代码随想录day23--回溯的应用2

LeetCode39.组合总和 题目描述&#xff1a; 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target &#xff0c;找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 &#xff0c;并以列表形式返回。你可以按 任意顺序 返回这些组合。 candidates…

RCS系统之:基础算法

设计仓库机器人的控制管理系统涉及到路径规划、任务分配、库存管理、通信系统等方面。以下是一个基本的仓库机器人控制管理系统方案的概述&#xff1a; 路径规划&#xff1a;设计一个路径规划系统&#xff0c;用于确定机器人在仓库内的最佳行驶路径&#xff0c;以最大程度地提…

optee TA文件签名

TA的签名 在optee_os目录下&#xff0c;存放着签名的私钥和签名脚本。 工程目录 optee_os/keys/default_ta.pem 工程目录 optee_os/scripts/sign_encrypt.py 编译TA时会先将TA编译为elf文件。此时执行签名脚本&#xff0c;对elf文件签名并生成.ta文件。 签名使用了RSA2048的 私…

及其详细的Markdown基础-学习笔记(附有使用案例)

Markdown 基础语法 查看更多学习笔记&#xff1a;GitHub&#xff1a;LoveEmiliaForever 标题创建 标题语法格式 在文字前添加一至六个#即可创建标题 标题是有等级的&#xff0c;具体等级根据#个数决定 由于标题等级参与构建整篇文章的架构&#xff0c;编写时应该遵循如下规…

【C++航海王:追寻罗杰的编程之路】string类

目录 1 -> 为什么学习string类&#xff1f; 1.1 -> C语言中的字符串 2 -> 标准库中的string类 2.1 -> string类 2.2 -> string类的常用接口 3 -> string类的模拟实现 3.1 -> 经典的string类问题 3.2 -> 浅拷贝 3.3 -> 深拷贝 3.3.1 ->…

51_蓝桥杯_led流水灯

一 原理图分析 二 三八译码器工作原理 三八译码器&#xff1a;3个输入控制8路互斥的低电平有效输出。 C B A 输出 0 0 0 Y0 0 0 1 Y1 0 1 0 Y2 0 1 1 Y3 1 0 0 Y4 1 0 1 Y5 1 1 0 Y6 1 1 1 Y7 三 锁存器工作原理 锁存器&#xff1a;当使…

【报告解析】OpenAI Sora视频模型官方报告全解析 | 效果,能力以及基本原理

省流版 1 核心数据处理将视频数据整合成一个一个的Patch&#xff0c;方便统一训练数据&#xff0c;利用扩散Transformer架构 2 功能效果除了可以实现基础的文生视频外&#xff0c;实际上还有非常惊艳的视频延展&#xff0c;视频编辑&#xff0c;视频连接等多种功能&#xff0…

FPGA中的模块调用与例化

目录 一、模块调用与实例化 1.1 模块调用 1.2 模块实例化 1.3 Verilog例化语句及其用法 1.3.1 例化语句的基本格式 1.3.2 实例化三种不同的连接方法 二、模块调用实例-全加器与半加器 2.1 半加器模块 2.2 全加器模块 三、参数定义关键词与整数型寄存器 3.1 参数定义关…

第五节笔记:LMDeploy 大模型量化部署实践

大模型部署背景 参数用FP16半精度也就是2字节&#xff0c;7B的模型就大约占14G 2.LMDeploy简介 量化降低显存需求量&#xff0c;提高推理速度 大语言模型推理是典型的访问密集型&#xff0c;因为是decoder only的架构&#xff0c;需要token by token的生成&#xff0c;因…

设计模式Python实现

过年在家瞎折腾&#xff0c;闲着无聊看到设计模式&#xff0c;于是就想着用Python实现一下。 简单工厂 根据传入的参数决定创建出哪一种产品类的实例。 class CashFactory:def createCashAdapter(self, type):if type "满100减20":return CashReturn(100, 20)elif…

安全技能讲座 - 便携式灭火器 (Portable Fire Extinguishers )

【Transcript 】 火灾随时随地都可能发生&#xff0c;而且毫无征兆。如果您在家中或工作中遇到火灾&#xff0c;便携式灭火器可以帮助您保护自己&#xff0c;并有可能将火灾扼杀在摇篮中。本课程将向您介绍便携式灭火器、其工作原理和使用方法。成功完成本课程后&#xff0c;您…

C++--Linux基础使用

文章目录 几个简单命令开机关机重启查看当前目录切换当前目录列出当前目录下的目录和文件列出指定目录下的目录和文件清屏查看/设置时间 目录和文件目录概要目录详细说明相对路径和绝对路径 上古神器vi创建/打开文件vi 的两种模式vi 的常用命令 用户管理组管理用户管理修改用户…

每日一题——LeetCode1455.检查单词是否为句中其他单词的前缀

方法一 js函数slice() 将字符串按空格符分割为单词数组&#xff0c;记searchWord的长度为n&#xff0c;分割每个单词的前n位看是否和searchWord匹配 var isPrefixOfWord function(sentence, searchWord) {let res sentence.split(" ")for(i 0 ; i < res.lengt…

【Java EE初阶十二】网络原理(二)

2. 传输层 2.2 TCP协议 2.2.2 关于可靠传输 4.滑动窗口 前面的三个机制&#xff0c;都是在保证 tcp 的可靠性&#xff1b; TCP 的可靠传输,是会影响传输的效率的.(多出了一些等待 ack 的时间,单位时间内能传输的数据就少了)&#xff1b; 滑动窗口,就让可靠传输对性能的影响,更…

Linux:docker在线仓库(docker hub 阿里云)基础操作

把镜像放到公网仓库&#xff0c;这样可以方便大家一起使用&#xff0c;当需要时直接在网上拉取镜像&#xff0c;并且你可以随时管理自己的镜像——删除添加或者修改。 1.docker hub仓库 2.阿里云加速 3.阿里云仓库 由于docker hub是国外的网站&#xff0c;国内的对数据的把控…

2024年十大数字技术趋势与其安全挑战报告

今天分享的是行业报告&#xff1a;《2024年十大数字技术趋势与其安全挑战报告》 &#xff08;内容出品方&#xff1a;CSA GCR&#xff09; 报告共计&#xff1a;86页 来源&#xff1a;《见鹿报告》 序言 随着数字技术的迅猛发展,越来越多的组织和个人在数字化环境中开展业…

【IIS中绑定SSL证书】

下载SSL证书&#xff1a; 打开服务器IIS&#xff1a; 点击导入 在IIS中新增网站&#xff1a;

2024年【天津市安全员B证】考试技巧及天津市安全员B证复审模拟考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年天津市安全员B证考试技巧为正在备考天津市安全员B证操作证的学员准备的理论考试专题&#xff0c;每个月更新的天津市安全员B证复审模拟考试祝您顺利通过天津市安全员B证考试。 1、【多选题】《建设行政处罚决定…