【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.mzph.cn/news/748135.shtml

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

相关文章

Vulnhub - Jarbas

希望和各位大佬一起学习&#xff0c;如果文章内容有错请多多指正&#xff0c;谢谢&#xff01; 个人博客链接&#xff1a;CH4SER的个人BLOG – Welcome To Ch4sers Blog Jarbas 靶机下载地址&#xff1a;https://www.vulnhub.com/entry/jarbas-1,232/ 0x01 信息收集 Nmap…

10分钟用docker搭建【devops】

1.gitlab docker run -d --name gitlab --restartalways --network devops-network -p 8000:80 -p 443:443 -v C:/docker/gitlab/config:/etc/gitlab -v C:/docker/gitlab/logs:/var/log/gitlab -v C:/docker/gitlab/data:/var/opt/gitlab gitlab/gitlab-ce:latest运行完成记得…

智慧工地管理平台APP源码基于物联网、云计算、大数据等技术

目录 ​系统特点 智慧工地云平台功能模块 1、基础数据管理 2、考勤管理 3、安全隐患管理 4、视频监控 5、塔吊监控 6、升降机监控 7、管理分析报表 8、移动端数据推送 9、数据接收管理 智慧工地管理平台系统基于物联网、云计算、大数据等技术&#xff0c;助力工地管理…

wsl ubuntu 安装cuda环境

wsl ubuntu 安装cuda环境: CUDA Toolkit 11.6 Downloads | NVIDIA DeveloperDownload CUDA Toolkit 11.6 for Linux and Windows operating systems.https://developer.nvidia.com/cuda-11-6-0-download-archive?target_os=Linux&target_arch=x86_64&Distribution=W…

前端工程化:提升开发效率的秘诀

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

Python Web开发记录 Day11:Django part5 管理员管理

名人说&#xff1a;莫道桑榆晚&#xff0c;为霞尚满天。——刘禹锡&#xff08;刘梦得&#xff0c;诗豪&#xff09; 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录 1、创建管理员表2、管理员列表3、添加管理员①添…

神策分析 Copilot 成功通过网信办算法备案,数据分析 AI 化全面落地

近日&#xff0c;神策数据严格遵循《互联网信息服务深度合成管理规定》&#xff0c;已完成智能数据问答算法备案。该算法基于大模型技术&#xff0c;专注于为客户提供数据指标查询和数据洞察方面的专业回答。 神策分析 Copilot 运用神策数据智能数据问答算法&#xff0c;聚焦分…

stm32-定时器输出比较PWM

目录 一、输出比较简介 二、PWM简介 三、输出比较模式实现 1.输出比较框图(以通用定时器为例) 2.PWM基本结构 四、固件库实现 1.程序1&#xff1a;PWM呼吸灯 2.程序2&#xff1a;PWM驱动直流电机 3.程序3&#xff1a;控制舵机 一、输出比较简介 死区生成和互补输出一般…

深度学习每周学习总结P1(pytorch手写数字识别)

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 | 接辅导、项目定制 目录 0. 总结1. 数据导入部分2. 模型构建部分3. 训练前的准备4. 定义训练函数5. 定义测试函数6. 训练过程 0. 总结 总结: 数据导入部分&a…

014 Linux_同步

​&#x1f308;个人主页&#xff1a;Fan_558 &#x1f525; 系列专栏&#xff1a;Linux &#x1f339;关注我&#x1f4aa;&#x1f3fb;带你学更多操作系统知识 文章目录 前言一、死锁&#xff08;1&#xff09;死锁概念 二、同步&#xff08;1&#xff09;同步概念&#xff…

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

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

家电工厂5G智能制造数字孪生可视化平台,推进家电工业数字化转型

家电5G智能制造工厂数字孪生可视化平台&#xff0c;推进家电工业数字化转型。随着科技的飞速发展&#xff0c;家电行业正迎来一场前所未有的数字化转型。在这场制造业数字化转型中&#xff0c;家电5G智能制造工厂数字孪生可视化平台扮演着至关重要的角色。本文将从数字孪生技术…

提交数据加快百度搜索引擎收录

百度站长工具做了更新&#xff0c;百度收录的地址分享如下&#xff0c;新站点提交后&#xff0c;可以加快百度收录。 普通收录_加快网站内容抓取&#xff0c;快速提交数据工具_站长工具_网站支持_百度搜索资源平台普通收录工具可实时向百度推送数据&#xff0c;创建并提交site…

git 安装、创建仓库、常用命令、克隆下载、上传项目、删除分支 -- 一篇文章总结

一、git安装 1、git安装地址&#xff1a;https://git-scm.com/downloads 2、选择操作系统 3、安装自己系统对应的操作位数 4、等待下载完&#xff0c;一路next安装就可以了 5、安装完成后&#xff0c;在任意文件夹点击右键&#xff0c;看到下图说明安装成功 二、创建仓库 1…

云原生(二)、Docker基础

Docker Docker 是一种开源的容器化平台&#xff0c;用于开发、部署和运行应用程序。它允许开发者将应用程序及其所有依赖项打包到一个可移植的容器中&#xff0c;这个容器可以在任何支持 Docker 的环境中运行&#xff0c;无论是开发人员的个人笔记本电脑、测试环境、生产服务器…

ROS Kinetic通信编程:话题、服务、动作编程

文章目录 一、话题编程二、服务编程三、动作编程 接上篇&#xff0c;继续学习ROS通信编程基础 一、话题编程 步骤&#xff1a; 创建发布者 初始化ROS节点向ROS Master注册节点信息&#xff0c;包括发布的话题名和话题中的消息类型按照一定频率循环发布消息 创建订阅者 初始化…

stm32-编码器测速

一、编码器简介 编码电机 旋转编码器 A,B相分别接通道一和二的引脚&#xff0c;VCC&#xff0c;GND接单片机VCC&#xff0c;GND 二、正交编码器工作原理 以前的代码是通过触发外部中断&#xff0c;然后在中断函数里手动进行计次。使用编码器接口的好处就是节约软件资源。对于频…

从0开始回顾MySQL---事务四大特性

事务概述 事务是一个最小的工作单元。在数据库当中&#xff0c;事务表示一件完整的事儿。一个业务的完成可能需要多条DML语句共同配合才能完成&#xff0c;例如转账业务&#xff0c;需要执行两条DML语句&#xff0c;先更新张三账户的余额&#xff0c;再更新李四账户的余额&…

实现elasticsearch和数据库的数据同步

1. 数据同步 elasticsearch中的酒店数据来自于mysql数据库&#xff0c;因此mysql数据发生改变时&#xff0c;elasticsearch也必须跟着改变&#xff0c;这个就是elasticsearch与mysql之间的数据同步。 1.1. 思路分析 常见的数据同步方案有三种&#xff1a; 同步调用 异步通知…

面试题手撕篇

参考博客 开始之前&#xff0c;理解递归 手写 浅拷贝 function shallow(target){if(target instanceof Array){return [...resObj]}else{return Object.assign({},target);} }手写深拷贝 const _sampleDeepClone target > {// 补全代码return JSON.parse(JSON.stringify…