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

news2024/11/26 4:34:03

版本说明

当前版本号[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++;
            }
        }
    }
}

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

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

相关文章

【Python 千题 —— 基础篇】录入学生信息

题目描述 题目描述 在开学时&#xff0c;需要录入学生的身份信息。每次在控制台输入学生身份证号&#xff0c;按下回车后录入新的信息。如果输入的身份证号已经录入过&#xff0c;需要提示 “该身份证号已录入” 并继续等待下一个输入。如果按下两次回车键&#xff0c;则结束…

软件测试/测试开发丨接口测试学习笔记,TcpDump与WireShark

点此获取更多相关资料 本文为霍格沃兹测试开发学社学员学习笔记分享 原文链接&#xff1a;https://ceshiren.com/t/topic/27859 协议分析工具 网络监听&#xff1a;TcpDump WireShark 代理 Proxy 推荐工具&#xff1a;手工测试charles [全平台]、安全测试burpsuite [全平台 j…

计算机毕业设计 基于SpringBoot的养老院管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

微信小程序:js实现不改变原数组的情况下增加一条对象到新数组中

效果 核心 old_array.slice(0) 表示对 old_array 这个数组进行切片操作&#xff0c;从索引 0 开始&#xff08;包括索引 0&#xff09;&#xff0c;直到数组的末尾&#xff0c;old_array.slice(0) 中的 0 表示开始切片的索引位置&#xff0c;而由于没有传入第二个参数&#xff…

SpringBoot进制转换规则问题

1.填写yml文件 dataSource:driver-class-name: com.mysql.jdbc.Driver789password: 01272.测试类 package com.forever;import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.test.context.Spri…

功能: 在web应用程序中、读取文件

通过使用文件 API&#xff0c;web 内容可以要求用户选择本地文件&#xff0c;然后读取这些文件的内容。这种选择可以通过使用 HTML <input type"file"> 元素或通过拖放来完成。 1.通过 click() 方法使用隐藏的文件 input 元素 你可以隐藏公认难看的文件 <…

投票助手图文音视频礼物打赏流量主小程序开源版开发

投票助手图文音视频礼物打赏流量主小程序开源版开发 图文投票&#xff1a;用户可以发布图文投票&#xff0c;选择相应的选项进行投票。 音视频投票&#xff1a;用户可以发布音视频投票&#xff0c;观看音视频后选择相应的选项进行投票。 礼物打赏&#xff1a;用户可以在投票过…

11、云服务器的宝塔面板安装、在宝塔安装MySQL、Redis、NGINX、JAVA

1►云服务器的宝塔面板安装 如果购买云服务器的时候&#xff0c;选择系统为宝塔面板&#xff0c;那么就不需要麻烦了。宝塔已经装好了。 但是如果没有选择宝塔面板&#xff0c;就需要手动安装。 第一步&#xff1a;点击重装系统 第二步&#xff1a;选择宝塔面板 宝塔面板官方…

javaScript爬虫程序抓取评论

由于评论区目前没有开放的API接口&#xff0c;所以我们不能直接通过编程获取到评论区的内容。但是&#xff0c;我们可以通过模拟浏览器的行为来实现这个功能。以下是一个使用Python的requests库和BeautifulSoup库来实现这个功能的基本思路&#xff1a; import requests from bs…

Python必知必会 os 模块详解

文章目录 Python os 模块os模块的常用操作os.path模块os.open()模块 ❤️ 作者简介&#xff1a;大家好我是小鱼干儿♛是一个热爱编程、热爱算法的大三学生&#xff0c;蓝桥杯国赛二等奖获得者&#x1f41f; 个人主页 &#xff1a;https://blog.csdn.net/qq_52007481⭐ 个人社区…

【嵌入式开发学习】__如何将BootLoader与APP合并成一个固件

目录 一、前言 二、传统方式 三、高效方式 1. 合并文件 2. bin转hex srec_cat工具 3. 完整示例 4. 举一反三 (*&#xffe3;︶&#xffe3;)创作不易&#xff01;期待你们的 点赞、收藏和评论喔。 一、前言 嵌入式固件一般分为 BootLoader 和 App&#xff0c;BootLo…

在Windows 10上安装单机版的Spark

一、Spark是什么 Spark是一种通用的大数据计算框架,是基于RDD(弹性分布式数据集)的一种计算模型。是专门为大数据处理而设计的通用的计算引擎。 二、Spark需要运行的环境 Spark需要scala作为运行环境 三、下载scala&#xff0c;并且配置环境变量 Scala官网:Install | The S…

C/C++大写字母的判断 2021年6月电子学会青少年软件编程(C/C++)等级考试一级真题答案解析

目录 C/C大写字母的判断 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、程序说明 五、运行结果 六、考点分析 C/C大写字母的判断 2021年6月 C/C编程等级考试一级编程题 一、题目要求 1、编程实现 输入一个字符&#xff0c;判断是否是英文大…

开源之夏经验分享|Dragonfly 社区 李从旺:社区贡献也是一种影响力

今天&#xff0c;我们邀请到了开源之夏 2023 活动 Dragonfly 社区的中选学生李从旺同学&#xff0c;他此次承担的项目是——「PyTorch Serve 基于 Dragonfly P2P 技术分发模型」。希望通过他的开源故事&#xff0c;能让更多人了解到开源的魅力&#xff0c;也可以从不同的视角去…

《视觉SLAM十四讲》-- 相机与图像

04 相机与图像 4.1 相机模型 4.1.1 针孔相机模型 针孔模型描述了一束光线通过针孔后&#xff0c;在针孔背面投影成像的关系&#xff08;类似小孔成像原理&#xff09;。 根据相似三角关系 Z f − X X ′ − Y Y ′ (3-1) \frac{Z}{f}-\frac{X}{X^{\prime}}-\frac{Y}{Y^{\p…

[架构之路-246]:目标系统 - 设计方法 - 软件工程 - 需求工程- 需求开发:获取、分析、定义、验证

目录 前言&#xff1a; 架构师为什么需要了解需求分析 一、需求工程概述 1.1 概述 1.2 需求工程的两大部分 &#xff08;1&#xff09;需求开发&#xff1a;系统工程师的职责、目标系统开发角度 &#xff08;2&#xff09;需求管理&#xff1a;项目管理者的职责、项目管…

Azure - 机器学习:使用自动化机器学习训练计算机视觉模型的数据架构

目录 一、用于训练的数据架构图像分类&#xff08;二进制/多类&#xff09;多标签图像分类对象检测实例分段 二、用于推理的数据格式输入格式输出格式图像分类多标签图像分类对象检测实例分段 了解如何设置Azure中 JSONL 文件格式&#xff0c;以便在训练和推理期间在计算机视觉…

Kotlin文件和类为什么不是一对一关系

在Java中&#xff0c;一个类文件的public类名必须和文件名一致&#xff0c;如何不一致就会报异常&#xff0c;但是在kotlin的文件可以和类名一致&#xff0c;也可以不一致。这种特性&#xff0c;就跟c有点像&#xff0c;毕竟c的.h 和 .cpp文件是分开的。只要最终编译的时候对的…

工业相机基本知识理解:工业相机IO接口,功耗和供电方式

I-input 相机接收外部信号&#xff0c;可用于触发相机&#xff08;硬触发&#xff09;&#xff0c;也可用于定制不同的 功能&#xff0c;例如使用不同信号宽度来改变相机的曝光时间。主要用于现场设 备控制相机使用&#xff0c;常常配合各种传感器使用 O-output 相机输出信号&a…

MS1112,一款16-bit 多输入内置基准模数转换器

MS1112 是一款高精度 16bit 模数转换器&#xff0c;具有 2 组差分输入 或 3 组单端输入通道&#xff0c;高达 16bits 的分辨率。内部集成 2.048V 基 准源&#xff0c;差分输入范围达到 2.048V 。 MS1112 使用了 I 2 C 兼容接口&#xff0c; 并有 2 个地址管…