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

这篇具有很好参考价值的文章主要介绍了【PTA】L1-039 古风排版(C++)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【PTA】L1-039 古风排版(C++),PTA刷题库,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;

注意:文章来源地址https://www.toymoban.com/news/detail-843508.html

  • 代码中 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;
}

测试结果:

【PTA】L1-039 古风排版(C++),PTA刷题库,c++,开发语言

到了这里,关于【PTA】L1-039 古风排版(C++)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【PTA】L1-059 敲笨钟(C++)

    题目链接:L1-059 敲笨钟 - 团体程序设计天梯赛-练习集 (pintia.cn)  题目要求:  输入格式: 输出格式: 输入样例: 输出样例: 思路:  代码: 测试结果: 微博上有个自称“大笨钟V”的家伙,每天敲钟催促码农们爱惜身体早点睡觉。为了增加敲钟的趣味性,还会糟改几句古

    2024年04月11日
    浏览(75)
  • PTA L1-049 天梯赛座位分配(详解)

    前言:内容包括:题目,代码实现,大致思路,代码解读 天梯赛每年有大量参赛队员,要保证同一所学校的所有队员都不能相邻,分配座位就成为一件比较麻烦的事情。为此我们制定如下策略:假设某赛场有 N 所学校参赛,第 i 所学校有 M[i] 支队伍,每队 10 位参赛选手。令

    2024年02月03日
    浏览(47)
  • 【PTA】L1-043 阅览室(C++)

    题目链接:L1-043 阅览室 - 团体程序设计天梯赛-练习集 (pintia.cn)  目录: 题目要求: 输入格式: 输出格式: 输入样例: 输出样例:  思路: 代码:; 测试结果: 天梯图书阅览室请你编写一个简单的图书借阅统计程序。当读者借书时,管理员输入书号并按下 S 键,程序开始

    2024年04月15日
    浏览(84)
  • 2023 PTA天梯赛补题(L1 & L2)

    输入输出题 输入输出题 k == n 和 k == m 分别输出,题目怎么说就怎么做 判断一下c 等于a + b还是a*b或者都不是,分别按要求输出 针对每一群玩游戏的宝宝,枚举判断一下就好了 写的有点烦,基本就是一步一步模拟,思路在注释里写了 枚举分配方案,代码中a代表女生寝室的数

    2024年02月03日
    浏览(41)
  • PTA L1-048 矩阵A乘以B

    前言:内容包括四大模块:题目,代码实现,大致思路,代码解读 给定两个矩阵A和B,要求你计算它们的乘积矩阵AB。需要注意的是,只有规模匹配的矩阵才可以相乘。即若A有Ra​行、Ca​列,B有Rb​行、Cb​列,则只有Ca​与Rb​相等时,两个矩阵才能相乘。 输入格式: 输入

    2024年02月04日
    浏览(35)
  • pta模拟赛 L1-8 小偷踩点(C++)

    阅读理解太难了  俗话说不怕贼偷,就怕贼惦记。 小偷在作案前有时会在居民家的门、墙上做一些标记,每一种记号代表一个含义,一般人看不懂,但同行一看便知道这个家庭的情况。不过派出所干警也不是吃素的,很快破译了这些记号的含义(如上图),并且在辖区内广为

    2024年04月26日
    浏览(100)
  • PTA L1-025 正整数A+B(详解)

    前言:本期是关于正整数A+B的详解,内容包括四大模块:题目,代码实现,大致思路,代码解读,今天你c了吗?   题的目标很简单,就是求两个正整数 A 和 B 的和,其中 A 和 B 都在区间[1,1000]。稍微有点麻烦的是,输入并不保证是两个正整数。 输入格式: 输入在一行给出

    2023年04月21日
    浏览(40)
  • PTA L1-064 估值一亿的AI核心代码(详解)

    前言:内容包括:题目,代码实现,大致思路,代码解读 以上图片来自新浪微博。 本题要求你实现一个稍微更值钱一点的 AI 英文问答程序,规则是: 无论用户说什么,首先把对方说的话在一行中原样打印出来; 消除原文中多余空格:把相邻单词间的多个空格换成 1 个空格,把行首

    2024年02月03日
    浏览(40)
  • 【2023团体程序设计天梯赛CCCC】GPLT2023,L1~L2部分(PTA,L1-089~L1-096,L2-045~L2-048)题解代码&复盘

    概要 L1部分:L1-089~L1-096 L2部分:L2-045~L2-048 L3部分:L3-033~L3-036 L1-089 最好的文档 5 L1-090 什么是机器学习 5 L1-091 程序员买包子 10 L1-092 进化论 10 L1-093 猜帽子游戏 15 L1-094 剪切粘贴 15 L1-095 分寝室 20 L1-096 谁管谁叫爹 20 L2-045 堆宝塔 25 L2-046 天梯赛的赛场安排 L2-047 锦标赛 25 L2-048

    2024年02月01日
    浏览(47)
  • 【PTA】L1-064 估值一亿的AI核心代码(详C++)

    题目链接: L1-064 估值一亿的AI核心代码 - 团体程序设计天梯赛-练习集 (pintia.cn) 题目要求:  输入格式: 输出格式: 输入样例: 输出样例: 思路: 相关好用函数介绍:  字符函数: erase函数的三种使用方法: replace() 函数用法 代码: 测试结果:  以上图片来自新浪微博。

    2024年04月10日
    浏览(81)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包