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

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

目录:

目录:

题目要求:

输入格式:

输出格式:

输入样例:

输出样例:

思路:

代码:

测试结果:

​编辑 


题目要求:

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

输入格式:

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

输出格式:

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

输入样例:

4
This is a test case

输出样例:

asa T
st ih
e tsice 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;
}

测试结果:

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

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

相关文章

AMRT 3D 数字孪生引擎(轻量化图形引擎、GIS/BIM/3D融合引擎):智慧城市、智慧工厂、智慧建筑、智慧校园。。。

AMRT3D 一、概述 1、提供强大完整的工具链 AMRT3D包含开发引擎、资源管理、场景编辑、UI搭建、项目预览和发布等项目开发所需的全套功能&#xff0c;并整合了动画路径、精准测量、动态天气、视角切换和动画特效等工具。 2、轻量化技术应用与个性化定制 AMRT3D适用于快速开…

基于GA优化的CNN-GRU-Attention的时间序列回归预测matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1卷积神经网络&#xff08;CNN&#xff09;在时间序列中的应用 4.2 长短时记忆网络&#xff08;LSTM&#xff09;处理序列依赖关系 4.3 注意力机制&#xff08;Attention&#xff09; 4…

matplotlib绘图如何处理日期数据如“x月x日”

问题描述 数据文件如下图所示&#xff1a; 想要绘制横坐标为Date&#xff0c;纵坐标为Height的折线图&#xff08;其他类型的图也是类似的&#xff09;。关键的问题在于如何处理这种日期数据&#xff0c;正常绘图&#xff0c;并设置横坐标每隔x天显示刻度。 本文提供一个解决…

STM32初识2

复位和时钟控制&#xff08;RCC&#xff1a;reset clock control&#xff09; 系统复位 当发生以下任一事件时&#xff0c;产生一个系统复位&#xff1a; 1. NRST 引脚上的低电平 ( 外部复位 ) 2. 窗口看门狗计数终止 (WWDG 复位 ) 3. 独立看门狗计数终止 (IWDG 复位 ) …

服务器遭遇挖矿病毒syst3md及其伪装者rcu-sched:原因、症状与解决方案

01 什么是挖矿病毒 挖矿病毒通常是恶意软件的一种&#xff0c;它会在受感染的系统上无授权地挖掘加密货币。关于"syst3md"&#xff0c;是一种特定的挖矿病毒&#xff0c;它通过在受感染的Linux系统中执行一系列复杂操作来达到其目的。这些操作包括使用curl从网络下载…

我的尝试:Codigger + Vim

若您愿意耐心投入&#xff0c;学习 Vim 的过程其实远比想象中轻松。我对 Vim 产生兴趣&#xff0c;主要是源于它对提升生产力的巨大潜力。我尝试了 Neovim、NvChad 以及 Codigger Vim 插件&#xff0c;如今我的工作效率已远超从前。 那么&#xff0c;Vim 究竟是什么呢&#xff…

linux之权限管理和组

一&#xff0c;ACL权限 1.1&#xff0c;什么是acl权限&#xff1f; ACL是Access Control List的缩写&#xff0c;即访问控制列表。可以通过下列的实例来理解ACL的作用&#xff1a; 思考如何实现如下的权限控制&#xff1a; 每个项目成员在有一个自己的项目目录&#xff0c;…

MySQL MHA故障切换

目录 一、案例分析 1.1、案例概述 1.2、案例前置知识点 1&#xff09;什么是 MHA 2&#xff09;MHA 的组成 3&#xff09;MHA 的优势 4&#xff09;MHA 现状 1.3、案例环境 1&#xff09;本案例环境 ​编辑 2&#xff09;案例需求 3&#xff09;案例实现思路…

Nuxt3 初学,基础配置,页面结构搭建,引入element

1.下载Nuxt框架 Nuxt 中文站 - 直观的Web框架 Nuxt3文档 NuxtNuxt是一个开源框架&#xff0c;它使web开发直观而强大。自信地创建高性能和生产级全栈web应用程序和网站。https://www.nuxt.com.cn/根据官方文档进行配置 2.配置页面 1.主要页面结构 导航栏内容底部 1.在comp…

LeetCode每日一题——两数之和

两数之和OJ链接&#xff1a;1. 两数之和 - 力扣&#xff08;LeetCode&#xff09; 题目&#xff1a; 思路&#xff1a; 在读懂题目后很多人觉得这种题目很简单&#xff0c;但是不管怎么写&#xff0c;在VS等其他编译器上能跑成功&#xff0c;但是在LeetCode上就是没办法通过。…

面试常问,ADC,PWM

一 PWM介绍 pwm全名&#xff08;Pulse Width Modulation&#xff09;&#xff1a;脉冲宽度调制 在具有惯性的系统中&#xff0c;可以通过对一系列脉冲的宽度进行调制&#xff0c;来等效地获得所需要的模拟参量&#xff0c;常应用于电机控速等领域。PWM一定程度上是数字到模拟…

Ansible非标记语言YAML与任务剧本Playbook

前言 上篇介绍了 Ansible 单模块&#xff08;AD-Hoc&#xff09;的相关内容Ansible自动化运维Inventory与Ad-Hoc-CSDN博客&#xff0c;Ad-Hoc 命令是一次性的、即时执行的命令&#xff0c;用于在远程主机上执行特定任务&#xff0c;这些命令通常用于快速执行简单的任务。当需要…