【PTA】L1-039 古风排版(C++)

题目链接:L1-039 古风排版 - 团体程序设计天梯赛-练习集 (pintia.cn) 

目录:

目录:

题目要求:

输入格式:

输出格式:

输入样例:

输出样例:

思路:

代码:

测试结果:

​编辑 


题目要求:

中国的古人写文字,是从右向左竖向排版的。本题就请你编写程序,把一段文字按古风排版。

输入格式:

输入在第一行给出一个正整数N(<100),是每一列的字符数。第二行给出一个长度不超过1000的非空字符串,以回车结束。

输出格式:

按古风格式排版给定的字符串,每列N个字符(除了最后一列可能不足N个)。

输入样例:

4
This is a test case

输出样例:

asa T
st ih
e tsi
 ce s

 思路:

让我们逐步分析代码:

头文件、命名空间:这包括了几乎所有的标准库,并使用了 std 命名空间

#include <bits/stdc++.h>  
using namespace std;

主函数:这是程序的入口点。

int main()
 
{
 
       ....
 
}

变量声明:n表示要将字符串分成的列数,str用于存储输入的字符串,arr`是一个二维字符数组,用于存储重新排列后的字符。
 

int n;  
string str;  
char arr[1001][1001];

* `n`:列数。

* `str`:输入的字符串。

* `arr`:一个二维字符数组,用于存储转置后的字符串。

读取输入:首先输入列数n,然后使用getchar()来消耗输入流中的换行符(这是为了避免它影响后面的getline函数)。接着使用getline函数读取整行的字符串。

cin >> n;  
getchar();  
getline(cin,str);

* `cin >> n;`:读取列数 `n`。

* `getchar();`:读取并丢弃一个字符,通常用于跳过输入中的换行符,确保 `getline` 能正确读取后面的字符串。

* `getline(cin,str);`:读取一行字符串到 `str`。

计算每列的长度:这里计算了行数l。首先,通过字符串长度除以列数得到基本的行数。然后,如果字符串长度不能被列数整除,说明还有剩余的字符,所以行数需要加1。
 

int l = str.size() / n;  
if(str.size() % n != 0)  
    l ++;
  • l = str.size() / n;:计算每行的基础字符数。
  • if(str.size() % n != 0) l ++;:如果字符串长度不能被 n 整除,则增加一行来容纳额外的字符。

列转换:这部分代码负责将字符重新排列到二维数组arr中。外层循环从下往上遍历每一行,内层循环从左往右遍历每一列。如果str[k]是字符串的结束符(即\0),则在arr中对应的位置放置空格;否则,将str[k]放到arr中,并增加k的值。

int k = 0;  
for(int i = l - 1; i >= 0; i--)  
{  
    for(int j = 0; j < n; j++)  
    {  
        if(str[k] == '\0')  
            arr[j][i] = ' ';  
        else   
        {  
            arr[j][i] = str[k];  
            k++;  
        }  
    }  
}
  • 外层循环从 l-1 到 0,表示从最后一行开始填充。
  • 内层循环从 0 到 n-1,表示填充每一行的字符。
  • 如果当前字符是字符串末尾的结束符 '\0',则在二维数组 arr 中对应位置放置空格 ' '
  • 否则,将当前字符放入 arr 的对应位置,并递增 k 来指向字符串中的下一个字符。

输出转置后的字符串:这部分代码负责输出重新排列后的字符。外层循环遍历每一列,内层循环遍历每一行,然后输出对应位置的字符。每输出完一列后输出一个换行符。

for(int i = 0; i < n; i++)  
{  
    for (int j = 0; j < l; j++)  
    {  
        cout << arr[i][j];  
    }  
    cout << endl;  
}
  • 外层循环遍历每一行。
  • 内层循环遍历每一行的每一个字符,并输出。

结束程序:程序正常结束。

return 0;

注意:

  • 代码中 arr 的大小被固定为 1001x1001,这意味着如果输入的字符串非常大或者列数非常大,可能会导致数组越界。在实际应用中,应该根据输入动态地分配数组大小,或者使用 std::vector 等动态数据结构。
  • 在将字符从 str 复制到 arr 的过程中,如果 str 中的字符已经用完(即 str[k] 是字符串结束符 \0),则将 arr 中的对应位置设置为空格字符 ' '
  • 最后,代码会按照行和列的顺序打印出重新排列后的字符串。

代码:

#include <bits/stdc++.h>

using namespace std;

int main()
{
    int n;
    string str;
    char arr[1001][1001];
    cin >> n;
    getchar();
    getline(cin,str);
    int l = str.size() / n;
    if(str.size() % n != 0)
        l ++;
    int k = 0;
    for(int i = l - 1; i >= 0; i--)
    {
        for(int j = 0; j < n; j++)
        {
            if(str[k] == '\0')
                arr[j][i] = ' ';
            else 
            {
                arr[j][i] = str[k];
                k++;
            }
        }
    }
    for(int i = 0; i < n; i++)
    {
        for (int j = 0; j < l; j++)
        {
            cout << arr[i][j];
        }
        cout << endl;
    }
    return 0;
}

测试结果:

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

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

相关文章

B. Array Fix

思路&#xff1a;我们倒着看&#xff0c;首先判断以下当前元素有没有被操作过&#xff0c;被操作过的话&#xff0c;那么需要改为操作后的数&#xff0c;然后跟当前数的前一个数进行比较&#xff0c;如果a[i] < a[i - 1]的话&#xff0c;那么需要将a[i - 1]拆分&#xff0c;…

(二)丶RabbitMQ的六大核心

一丶什么是MQ Message Queue(消息队列&#xff09;简称MQ&#xff0c;是一种应用程序对应用程序的消息通信机制。在MQ中&#xff0c;消息以队列形式存储&#xff0c;以便于异步传输&#xff0c;在MQ中&#xff0c;发布者&#xff08;生产者&#xff09;将消息放入队列&#xff…

基于HSV色度空间的图像深度信息提取算法FPGA实现,包含testbench和MATLAB辅助验证程序

目录 1.算法运行效果图预览 ​编辑2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 将FPGA结果导入到matlab显示结果如下&#xff1a; matlab的对比测试结果如下&#xff1a; 2.算法运行软件版本 vivado2019.2 matlab2022a…

C++提高笔记(四)---STL容器(stack、queue、list)

1、stack容器&#xff08;栈&#xff09; 1.1 栈stack基本概念 概念&#xff1a;stack是一种先进后出&#xff08;First In Last Out&#xff0c;FILO&#xff09;的数据结构&#xff0c;它只有一个出口 栈中只有顶端的元素才可以被外界调用&#xff0c;因此栈不允许有遍历行…

Java八股文(Element Plus)

Java八股文のElement Plus Element Plus Element Plus 什么是Element UI 和 Element Plus&#xff1f; Element UI 和 Element Plus 是基于 Vue.js 的一套非常受欢迎的开源 UI 组件库&#xff0c;用于快速构建具有现代化设计和丰富交互效果的前端界面。 Element UI 和 Element…

【C#】int+null=null

C#语法&#xff0c;这玩意不报错 intnullnull&#xff0c;有点不合逻辑 (Int32)(bizRepair0rder.CreateTime. Value - regues.Mlodifylime.Value).TotalMinutes (Int32)(bizRepair0rder.CreateTime. Value - reques.llodifylime.Value).TotalMinutes nullstring是引用类型&…

Kotlin:runBlocking导致App应用出现ANR问题实例

runBlocking简介 runBlocking 是常规函数&#xff1b; runBlocking 方法会阻塞当前线程来等待&#xff1b; runBlocking 的主线程会一直 阻塞 直到 runBlocking 内部的协程执行完毕。 runBlocking导致App应用出现ANR问题实例的效果 点击页面上的 刷新按钮 调用 refreshByrunBlo…

IDEA中的打包Build Artifacts详解

现在大家是不是很少遇见自己打包部署项目了&#xff0c;因为现在都是自动化部署&#xff0c;所以基本大的公司都没有了这一步。当项目开发完毕&#xff0c;需要对外发布时&#xff0c;我们就会用到IDEABuild Artifacts功能&#xff0c;那么如果在idea中打包呢。 在没有创建Arti…

金蝶云星空,怎么做BI数据可视化分析?

金蝶云星空是一个流程管理方面的软件&#xff0c;如果想要做BI数据可视化分析&#xff0c;还就需要一套BI方案&#xff0c;即一套奥威BI软件金蝶云星空BI方案。 奥威BI软件&#xff0c;负责提供平台和技术&#xff1b;金蝶云星空BI方案&#xff0c;则提供标准化的数据分析模型…

自动化脚本-图片验证码识别登陆

安装依赖包 pip install requests requests 模块是 Python 中一个常用的 HTTP 库&#xff0c;用于发送 HTTP 请求和处理 HTTP 响应。它提供了简洁而友好的 API&#xff0c;使得在 Python 中进行 HTTP 请求变得十分方便&#xff08;本文用于进行验证码下载&#xff09; pip ins…

计算机考研|双非一战135上岸,408经验分享+复盘

计算机专业的同学真的别想的太天真&#xff01; 相比于其他专业&#xff0c;计算机专业的同学其实还是很有优势的 但是现在随着计算机专业的同学越来越多&#xff0c;找工作的困难程度以及学历自然而然被卷起来了 以前的算法岗基本要求在本科以上&#xff0c;现在基本都是非92研…

FPGA静态时序分析与约束(四)、时序约束

系列文章目录 FPGA静态时序分析与约束&#xff08;一&#xff09;、理解亚稳态 FPGA静态时序分析与约束&#xff08;二&#xff09;、时序分析 FPGA静态时序分析与约束&#xff08;三&#xff09;、读懂vivado时序报告 文章目录 系列文章目录前言一、什么是时序约束&#xff1…

LinuxU盘挂载原理,为什么要用到U盘挂载及实现U盘挂载

目录 一、U盘挂载原理 二、为什么要用到U盘挂载 三、实现U盘挂载 一、准备工作 1、安装gcc 2、下载ntfs-3g 3、解压 4、编译准备 5、编译并安装 二、挂载演示 一、U盘挂载原理 Linux的U盘挂载原理涉及以下几个方面&#xff1a; 设备识别&#xff1a;当您将U盘插入Lin…

iOS 腾讯Pag动画框架-实现PagView的截图功能

背景 产品想要一个首页的截图功能&#xff0c;一听这个功能&#xff0c;心想那还不简单&#xff0c;将父视图控件转换成图片保存就行了。按照这个思路实现&#xff0c;很快就打脸啦&#xff0c;首页的这些动画一个都没有截出来&#xff0c;就像消失啦似的。然后蠢蠢的将动画暂…

HTML—标签的分类,span和div标签,不同的标签之间类型转换

标签的分类&#xff1a; ①块级标签&#xff1a;无论内容多少&#xff0c;会充满整个行。大小可自定义 例&#xff1a;p&#xff0c;h1&#xff0c;ul&#xff0c;ol&#xff0c;hr 等 ②行级标签&#xff1a;自身的大小就是标签的大小&#xff0c;不会占一整行。大小不可调 例…

人工智能程序使用的编程语言

用C语言可以写人工智能程序吗&#xff1f; 可以用C语言编写具有人工智能功能的程序&#xff0c;但是较为复杂。C语言是一种通用的编程语言&#xff0c;它在执行速度和资源控制方面表现出色&#xff0c;这使得它适合于需要高性能处理的人工智能应用&#xff0c;如游戏AI&#xf…

三种方式使用纯 CSS 实现星级评分

本文介绍三种使用纯 CSS 实现星级评分的方式。每种都值得细品一番~ 五角星取自 Element Plus 的 svg 资源 <svg xmlns"http://www.w3.org/2000/svg" viewBox"0 0 1024 1024" style""><pathfill"currentColor"d"M283.84 …

MySQL大小写敏感、MySQL设置字段大小写敏感

文章目录 一、MySQL大小写敏感规则二、设置数据库及表名大小写敏感2.1、查询库名及表名是否大小写敏感2.2、修改库名及表名大小写敏感 三、MySQL列名大小写不敏感四、lower_case_table_name与校对规则4.1、验证校对规则影响大小写敏感4.1、验证校对规则影响排序 五、设置字段内…

Django之图形验证码

Django之图形验证码 目录 Django之图形验证码【1】静态图片【2】视图层绑定静态文件【3】PIL生成图片(固定背景)【4】将图片存储在内存【5】生成文本信息【6】实现图片刷新 【1】静态图片 最基础的生成图片就是获取静态文件 <div style"margin-left: 10px;">…

idea+vim+pycharm的块选择快捷键

平时开发的时候&#xff0c;有的时候我们想用矩形框住代码&#xff0c;或者想在某列上插入相同字符 例如下图所示&#xff0c;我想在22-24行的前面插入0000 1. Idea的快捷键&#xff1a;option 鼠标 2. Pycharm的快捷键&#xff1a;shift option 鼠标 2. Vim 块选择 v/V/c…