CSDN每日一题学习训练——Java版(逆序输出、Z 字形变换、输出每天是应该学习还是休息还是锻炼)

版本说明

当前版本号[20231108]。

版本修改说明
20231108初版

目录

文章目录

  • 版本说明
  • 目录
  • 逆序输出
    • 题目
    • 解题思路
    • 代码思路
    • 参考代码
  • Z 字形变换
    • 题目
    • 解题思路
    • 代码思路
    • 参考代码
  • 输出每天是应该学习还是休息还是锻炼
    • 题目
    • 代码思路
    • 参考代码

逆序输出

题目

如:abcd1234,逆序输出:4321dcba

解题思路

  1. 首先,我们需要将输入的字符串 “abcd1234” 转换为字符数组
  2. 然后,我们使用一个for循环从字符数组的末尾开始遍历,直到第一个元素。
  3. 在每次循环中,我们将当前字符打印到控制台。这样,我们就可以得到逆序输出的结果。

代码思路

  1. 首先,定义一个字符串变量input,其值为"abcd1234"。

       // 定义一个字符串变量input,值为"abcd1234"
            String input = "abcd1234";
    
  2. 然后,使用toCharArray()方法将字符串转换为字符数组try1

     // 将字符串转换为字符数组try1
            char[] try1 = input.toCharArray();
    
  3. 接着,使用for循环从后向前遍历字符数组try1,并使用System.out.print()方法打印每个字符。

  // 使用for循环从后往前遍历字符数组try1
        for (int i = try1.length - 1; i >= 0; i--) {
            // 输出当前字符
            System.out.print(try1[i]);
        }

参考代码

将输入的字符串反转并打印出来。

import java.lang.*;
import java.io.*;
import java.util.*;
class ReverseString {
    public static void main(String[] args) {
        String input = "abcd1234";
        char[] try1 = input.toCharArray();
        for (int i = try1.length - 1; i >= 0; i--)
            System.out.print(try1[i]);
    }
}

Z 字形变换

题目

将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。

比如输入字符串为 “PAYPALISHIRING” 行数为 3 时,排列如下:

P A H N
A P L S I I G
Y I R

image-20231108221302392

之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:“PAHNAPLSIIGYIR”。

请你实现这个将字符串进行指定行数变换的函数:

string convert(string s, int numRows);

示例 1:

输入:s = “PAYPALISHIRING”, numRows = 3
输出:“PAHNAPLSIIGYIR”

示例 2:

输入:s = “PAYPALISHIRING”, numRows = 4
输出:“PINALSIGYAHRPI”
解释:
P I N
A L S I G
Y A H R
P I

示例 3:

输入:s = “A”, numRows = 1
输出:“A”

提示:

1 <= s.length <= 1000
s 由英文字母(小写和大写)、‘,’ 和 ‘.’ 组成
1 <= numRows <= 1000

解题思路

从上往下、从左到右进行 Z 字形排列如下:

以"PAYPALISHIRING"为例子:

image-20231108222709190

  1. 首先,我们需要理解该函数接收一个整数数组作为输入,并返回一个新的数组,其中每个元素是原数组中对应元素的平方。
  2. 接下来,我们可以使用循环遍历输入数组中的每个元素,并将其平方后添加到新的数组中。
  3. 在实现过程中,我们需要注意以下几点:
    • 输入数组可能包含负数或零,因此我们需要对负数或零进行特殊处理,确保它们的平方仍然是一个非负数。
    • 输入数组的长度可能是任意的,因此我们需要动态地分配内存来存储新的数组。

代码思路

  1. 如果numRows等于1(代表最后只需要输出一行数据,就可以把原来的数据直接输出),直接返回原字符串s,因为不需要进行任何转换。

     // 如果numRows等于1,直接返回原字符串s
            if (numRows == 1)
                return s;
    
  2. 计算字符串s的长度len。

     // 获取字符串s的长度
            int len = s.length();
    
  3. 如果len小于等于numRows,说明不足以形成Z字形排列,直接返回原字符串s。

     // 如果字符串s的长度小于等于numRows,直接返回原字符串s
            if (len <= numRows)
                return s;
    
  4. 计算每个周期的长度cycle_len,即Z字形排列中相邻两行之间的字符数量。

      // 计算每个周期的长度
            int cycle_len = 2 * numRows - 2;
    
  5. 计算完整周期的数量full_cycles和剩余字符的数量left。

         // 计算完整周期的数量
            int full_cycles = len / cycle_len;
         // 计算剩余字符的数量
            int left = len % cycle_len;
    
  6. 使用StringBuilder对象r来存储转换后的字符串。

      // 创建一个StringBuilder对象r,用于存储转换后的字符串
            StringBuilder r = new StringBuilder();
    
  7. 遍历完整周期,将每个周期的第一个字符添加到r中。

    // 遍历完整周期
            for (int i = 0; i < full_cycles; ++i) {
                // 将每个周期的第一个字符添加到r中
                r.append(s.charAt(i * cycle_len));
            }
    
  8. 如果存在剩余字符,将第一个字符添加到r中。

      // 如果存在剩余字符
            if (left > 0) {
                // 将第一个字符添加到r中
                r.append(s.charAt(full_cycles * cycle_len));
            }
    
  9. 遍历numRows-2行,对于每一行i,遍历完整周期,将第i+1个字符添加到r中,然后将第i+1+cycle_len-2*(i+1)个字符添加到r中。如果存在剩余字符,将对应的字符添加到r中。

    
            // 遍历numRows-2行
            for (int i = 0; i < numRows - 2; ++i) {
                // 遍历完整周期
                for (int j = 0; j < full_cycles; ++j) {
                    // 将第i+1个字符添加到r中
                    r.append(s.charAt(j * cycle_len + i + 1));
                    // 将第i+1+cycle_len-2*(i+1)个字符添加到r中
                    r.append(s.charAt(j * cycle_len + i + 1 + cycle_len - 2 * (i + 1)));
                }
                // 如果存在剩余字符
                if (left > 0) {
                    // 如果j * cycle_len + i + 1小于len,将该字符添加到r中
                    if (j * cycle_len + i + 1 < len)
                        r.append(s.charAt(j * cycle_len + i + 1));
                    // 如果j * cycle_len + i + 1 + cycle_len - 2 * (i + 1)小于len,将该字符添加到r中
                    if (j * cycle_len + i + 1 + cycle_len - 2 * (i + 1) < len)
                        r.append(s.charAt(j * cycle_len + i + 1 + cycle_len - 2 * (i + 1)));
                }
            }
    
  10. 遍历完整周期,将每个周期的最后一个字符添加到r中。

     // 遍历完整周期
            for (int i = 0; i < full_cycles; ++i)
                // 将每个周期的最后一个字符添加到r中
                r.append(s.charAt(i * cycle_len + numRows - 1));
    
  11. 如果存在剩余字符且长度大于等于numRows,将最后一个字符添加到r中。

     // 如果存在剩余字符且长度大于等于numRows,将最后一个字符添加到r中
            if (left >= numRows)
                r.append(s.charAt(full_cycles * cycle_len + numRows - 1));
    
  12. 返回转换后的字符串r的字符串形式。

        // 返回转换后的字符串
        return r.toString();

参考代码

​ 它包含一个名为convert的方法,该方法接受一个字符串s一个整数numRows作为参数,并返回一个字符串。这个方法的主要功能是将给定的字符串 s 按照 Z字形排列,其中numRows表示Z字形的行数。

class Solution {
    public String convert(String s, int numRows) {
        if (numRows == 1)
            return s;
        int len = s.length();
        if (len <= numRows)
            return s;
        int cycle_len = 2 * numRows - 2;
        int full_cycles = len / cycle_len;
        int left = len % cycle_len;
        StringBuilder r = new StringBuilder();
        int i;
        for (i = 0; i < full_cycles; ++i) {
            r.append(s.charAt(i * cycle_len));
        }
        if (left > 0) {
            r.append(s.charAt(i * cycle_len));
        }
        for (i = 0; i < numRows - 2; ++i) {
            int j;
            for (j = 0; j < full_cycles; ++j) {
                r.append(s.charAt(j * cycle_len + i + 1));
                r.append(s.charAt(j * cycle_len + i + 1 + cycle_len - 2 * (i + 1)));
            }
            if (left > 0) {
                if (j * cycle_len + i + 1 < len)
                    r.append(s.charAt(j * cycle_len + i + 1));
                if (j * cycle_len + i + 1 + cycle_len - 2 * (i + 1) < len)
                    r.append(s.charAt(j * cycle_len + i + 1 + cycle_len - 2 * (i + 1)));
            }
        }
        for (i = 0; i < full_cycles; ++i)
            r.append(s.charAt(i * cycle_len + numRows - 1));
        if (left >= numRows)
            r.append(s.charAt(i * cycle_len + numRows - 1));
        return r.toString();
    }
}

输出每天是应该学习还是休息还是锻炼

题目

30天中,从第一天开始五天学习,一天休息、一天锻炼,输出每天是应该学习还是休息还是锻炼

代码思路

  1. main方法中,定义了三个整数变量n1n2n3,以及一个循环变量i

  2. 循环从i=1开始,直到i<=30为止。在每次循环中,首先检查n1是否小于5。如果是,则输出字符串"学习",并将n1的值加1,然后使用continue语句跳过当前循环的剩余部分,进入下一次循环。

    for (i = 1; i <= 30; i++) {
                if (n1 < 5) { // 如果n1小于5,执行学习操作
                    System.out.println("学习");
                    n1++; // n1加1
                    continue; // 跳过本次循环剩余部分,进入下一次循环
                } 
    
  3. 如果n1不小于5,则输出字符串"休息",接着输出字符串"锻炼"。然后将n1的值重置为0,并使i的值加1。这样,在下一次循环中,将再次执行条件判断,并根据条件输出相应的字符串。

    else { // 如果n1不小于5,执行休息和锻炼操作
                    System.out.println("休息");
                    System.out.println("锻炼");
                    n1 = 0; // n1重置为0
                    i++; // i加1,跳过本次循环剩余部分,进入下一次循环
                }
    
  4. 整个程序的目的是按照指定的规则输出交替的字符串序列,即每5次循环输出一次"学习",然后输出"休息"和"锻炼"。

参考代码

用于打印"学习"和"休息"或"锻炼"的字符串。

public class HelloWorld {
    public static void main(String []args) {
        int n1=0,n2=0,n3=0,i;
        for(i=1;i<=30;i++){
            if(n1<5){
                System.out.println("学习");
                n1++;
                continue;
            }
            else{
                System.out.println("休息");
                System.out.println("锻炼");
                n1=0;
                i++;
            }
        }
    }
}

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

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

相关文章

【714. 买卖股票的最佳时机含手续费】

目录 一、题目解析二、算法原理三、代码实现 一、题目解析 二、算法原理 三、代码实现 class Solution { public:int maxProfit(vector<int>& prices, int fee) {int nprices.size();vector<vector<int>> dp(n,vector<int>(2));dp[0][0]-prices[0…

网络安全深入学习第八课——正向代理(工具:ReGeorg)

文章目录 一、环境配置二、开始模拟1、拿下跳板机的Webshell权限&#xff0c;并上传shell文件1.1、查看跳板机网络环境1.2、查看arp表 2、使用ReGeorg来建立连接2.1、生产ReGeorg隧道文件2.2、上传ReGeorg隧道的PHP脚本到跳板机2.3、连接隧道2.4、尝试浏览器连接 3、使用Proxif…

微服务使用指南

微服务使用指南 1.初识微服务 微服务可以认为是一种分布式架构的解决方案&#xff0c;提供服务的独立性和完整性&#xff0c;做到服务的高内聚、低耦合。 目前服务架构主要包含&#xff1a;单体架构和分布式架构。 1.1 单体架构 单体架构&#xff1a;把所有业务功能模块都…

【代码随想录】算法训练计划16

【代码随想录】算法训练计划04 1、111. 二叉树的最小深度 题目&#xff1a; 给定一个二叉树&#xff0c;找出其最小深度。 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。 说明&#xff1a;叶子节点是指没有子节点的节点。 思路&#xff1a; 用递归&#xff0…

在已有的虚拟环境中升级python版本

对于现有的虚拟环境&#xff0c;想升级python版本方法&#xff0c;试了无数的方法终于找对了。 1.首先activate对应的虚拟环境&#xff0c;然后输入下面的命令&#xff1a; conda install python3.8 建议加上镜像源 ​conda install python3.8 -i https://pypi.tuna.tsingh…

css实现进度条

预期样式 方法一 <script setup> import { ref } from "vue"; // import ScreenLeft from "./ScreenLeft/index.vue"; const width ref("76.5%"); </script><template>Screen<div class"progress-contain">…

操作系统 day08(进程通信)

进程通信的概念 进程间通信是指两个进程之间产生数据交互进程通信需要操作系统的支持&#xff0c;由于进程是分配系统资源&#xff08;包括内存地址&#xff09;的单位&#xff0c;因此各进程拥有的内存地址空间相互独立。同时为了保证安全&#xff0c;一个进程不能直接访问另…

如何实现云端开发能力快速提升?【DevRun】云上开发创新实践带你实现

随着企业数字化的转型趋势&#xff0c;软件成为数字化转型的关键驱动力&#xff0c;在云计算越来越普及且作用愈发重要的今天&#xff0c;现代应用正以难以想象的速度在增长&#xff0c;同时对软件开发工具提出了新的要求。 华为云CodeArts作为一站式云上开发创新工具&#xf…

【Python自学笔记】Flask调教方法Internel Server Error

收到老师的小组作业任务说是写一个自动报告程序&#xff0c;用PythonSQLiteHTML实现&#xff0c;好吧。 前面没什么问题&#xff0c;打开VSCode&#xff0c;连数据库读数据处理可视化模板拼凑&#xff0c;最后调用Flask框架出网页报告的时候总报错连接不了。 但换了jinjia2的渲…

【Linux】文件重定向以及一切皆文件

文章目录 前言一、重定向二、系统调用dup2三、重定向的使用四、一切皆文件 前言 Linux进程默认情况下会有3个缺省打开的文件描述符&#xff0c;分别是标准输入0&#xff0c; 标准输出1&#xff0c; 标准错误2&#xff0c; 0,1,2对应的物理设备一般是&#xff1a;键盘&#xff…

Git的简介以及基本使用

目录 一.Git的简介 拓展&#xff1a;Git与SVN的区别&#xff08;各自的优点与缺点&#xff09; 二.Git文件的4种状态 三.Git的常用命令 搭建完成之后&#xff0c;将项目文件也上传之后&#xff0c;现在模拟其他人来下载这个代码 今天就分享到这啦&#xff01;&#xff01;…

第五章:Testing Modules

文章目录 State and ProgramsTestability of State-Based Programsintrusively test 侵入性测试Non-intrusive test 非侵入测试java和其他工具的实践有限状态机进行单元测试(Unit testing with FSA)构建状态机步骤step1:识别 FSA 状态step2:确定某个状态下的可用操作step3:…

pytorch_神经网络构建5

文章目录 生成对抗网络自动编码器变分自动编码器重参数GANS自动编码器变分自动编码器gans网络Least Squares GANDeep Convolutional GANs 生成对抗网络 这起源于一种思想,假如有一个生成器,从原始图片那里学习东西,一个判别器来判别图片是真实的还是生成的, 假如生成的东西能以…

Qt 二维码生成与识别

1.简介 QZXing是一个基于Qt框架的二维码解码库&#xff0c;它是对ZXing&#xff08;Zebra Crossing&#xff09;开源项目的一个Qt封装。ZXing是一个功能强大的开源二维码解码库&#xff0c;支持多种类型的码&#xff0c;包括QR码、DataMatrix码、Aztec码等。 QZXing提供了一个…

Flink(一)【WordCount 快速入门】

前言 学完了 Hadoop、Spark&#xff0c;本想着先把 Kafka、Flume 这些工具先学完的&#xff0c;但想了想还是把核心的技术先学完最后再去把那些工具学学。 最近心有点累哈哈哈&#xff0c;偷偷立个 flag&#xff0c;反正也没人看&#xff0c;明年的今天来这里还愿哈&#xff0c…

vue3错误排查-POST请求的body参数 传参方式form-data和json

问题&#xff1a;vue3实现登录功能&#xff0c;登录成功后 跳转到登陆后的界面 一秒后 闪退回登录页 对应的输出结果也一闪而过&#xff0c;反复复查了代码&#xff0c;没问题。&#xff08;封装的 post 请求未成功发起&#xff09; 自测&#xff1a;进行断点输出调试。强行跳…

接口幂等性详解

1. 什么是幂等性 幂等性指的是对同一个操作的多次执行所产生的影响与一次执行的影响相同。无论操作执行多少次&#xff0c;系统状态都应该保持一致。 在计算机科学和网络领域中&#xff0c;幂等性通常用来描述服务或操作的特性。对于RESTful API或HTTP方法&#xff0c;一个幂…

049-第三代软件开发-软件部署脚本(一)

第三代软件开发-软件部署脚本(一) 文章目录 第三代软件开发-软件部署脚本(一)项目介绍软件部署脚本(一)其他方式 关键字&#xff1a; Qt、 Qml、 bash、 shell、 脚本 项目介绍 欢迎来到我们的 QML & C 项目&#xff01;这个项目结合了 QML&#xff08;Qt Meta-Object…

Java 最常见的面试题:常用的 jvm 调优的参数都有哪些?

Java 最常见的面试题&#xff1a;常用的 jvm 调优的参数都有哪些? 常用的Java虚拟机&#xff08;JVM&#xff09;调优参数有很多&#xff0c;以下是一些重要的参数&#xff1a; -Xms 和 -Xmx&#xff1a;这两个参数分别设置了JVM启动内存的最小值和最大值&#xff0c;单位通…

毅速丨为什么不锈钢材料在金属3D打印中应用广泛

不锈钢材料作为一种常见材料&#xff0c;在金属3D打印中应用广泛&#xff0c;可以说是目前使用率最高的材料&#xff0c;为什么不锈钢大受欢迎&#xff0c;主要由几点原因。 第一、工艺适合性 金属3D打印的工艺&#xff0c;如直接金属激光烧结&#xff08;DMLS&#xff09;或选…