前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >pta系列之古风排版

pta系列之古风排版

作者头像
用户11036582
发布2024-03-21 18:37:54
1170
发布2024-03-21 18:37:54
举报
文章被收录于专栏:跟我一起学编程

给大家分享一句我很喜欢我话: 知不足而奋进,望远山而前行!!! 铁铁们,成功的路上必然是孤独且艰难的,但是我们不可以放弃,远山就在前方,但我们能力仍然不足,所有我们更要奋进前行!!! 今天我们更新了古风排版内容

一、题目描述:

二、思路解析:

这个题的思路大概就是,我们得到有几行之后,输入字符串之后,需要知道一共需要几列,然后算出一共几列,然后记录一下,然后按题目中的情况去存入字符数组,注意,这里我们是要用二维数组,不明白二维数组的,可以去前面看一下这篇文章,关于C语言数组的认识(1)-CSDN博客

我在这篇文章中讲述了二维数组,然后逐步存入之后,我们就可以输出了。

这道题目的主要思路可以分为以下几个步骤:

  1. 读取输入:首先读取输入的正整数N,表示每一列的字符数,以及字符串。
  2. 确定列数:根据输入的字符串长度和N,可以计算出总共需要多少列。这里需要注意的是,最后一列可能不足N个字符。
  3. 创建二维数组:创建一个二维字符数组,大小为[N][列数],用来存储排版后的字符串。
  4. 从右向左填充字符:从输入的字符串末尾开始,从右向左逐个取字符,并按照古风排版的方式填入二维数组中。古风排版是从右向左竖向排版的,所以在二维数组中每一列上的字符应该是原字符串从右向左取得的。
  5. 输出结果:最后遍历二维数组,按照每列输出N个字符的方式输出排版后的字符串。

这个算法的关键在于如何将输入的字符串按照古风排版的方式填入二维数组中,然后再按照要求输出即可。这里的代码示例中已经包含了这个过程的实现。

三、代码实现:

C++版本:

代码语言:javascript
复制
#include<iostream>
#include<string>
using namespace std;

int main()
{
    int n = 0; cin >> n;
    cin.ignore();

    string str;
    getline(cin, str);

    int len = str.length();
    int col = len / n;
    if (len % n != 0)
    {
        col++;
    }
    char arr[100][100] = { 0 };
    int index = 0;
    for (int i = col - 1; i >= 0; i--)
    {
        for (int j = 0; j < n; j++)
        {
            if (index < len)
            {
                arr[j][i] = str[index++];
            }
            else arr[j][i] = ' ';
        }
    }
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < col; j++)
        {
            cout << arr[i][j];
        }
        cout << endl;
    }


    return 0;}
#include<iostream>
#include<string>
using namespace std;

int main()
{
    int n = 0; cin >> n;
    cin.ignore();

    string str;
    getline(cin, str);

    int len = str.length();
    int col = len / n;
    if (len % n != 0)
    {
        col++;
    }
    char arr[100][100] = { 0 };
    int index = 0;
    for (int i = col - 1; i >= 0; i--)
    {
        for (int j = 0; j < n; j++)
        {
            if (index < len)
            {
                arr[j][i] = str[index++];
            }
            else arr[j][i] = ' ';
        }
    }
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < col; j++)
        {
            cout << arr[i][j];
        }
        cout << endl;
    }


    return 0;}

C语言版本:

代码语言:javascript
复制
#include <stdio.h>
#include <string.h>

int main() {
    int n = 0;
    scanf("%d", &n);
    getchar(); // 消耗掉输入缓冲区中的换行符

    char str[1001];
    fgets(str, sizeof(str), stdin);
    str[strcspn(str, "\n")] = '\0'; // 移除fgets读入的换行符

    int len = strlen(str);
    int col = len / n;
    if (len % n != 0) {
        col++;
    }

    char arr[100][100] = {0};
    int index = 0;
    for (int i = col - 1; i >= 0; i--) {
        for (int j = 0; j < n; j++) {
            if (index < len) {
                arr[j][i] = str[index++];
            } else {
                arr[j][i] = ' ';
            }
        }
    }

    for (int i = 0; i < n; i++) {
        for (int j = 0; j < col; j++) {
            printf("%c", arr[i][j]);
        }
        printf("\n");
    }

    return 0;
}#include <stdio.h>
#include <string.h>

int main() {
    int n = 0;
    scanf("%d", &n);
    getchar(); // 消耗掉输入缓冲区中的换行符

    char str[1001];
    fgets(str, sizeof(str), stdin);
    str[strcspn(str, "\n")] = '\0'; // 移除fgets读入的换行符

    int len = strlen(str);
    int col = len / n;
    if (len % n != 0) {
        col++;
    }

    char arr[100][100] = {0};
    int index = 0;
    for (int i = col - 1; i >= 0; i--) {
        for (int j = 0; j < n; j++) {
            if (index < len) {
                arr[j][i] = str[index++];
            } else {
                arr[j][i] = ' ';
            }
        }
    }

    for (int i = 0; i < n; i++) {
        for (int j = 0; j < col; j++) {
            printf("%c", arr[i][j]);
        }
        printf("\n");
    }

    return 0;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-03-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、题目描述:
  • 二、思路解析:
  • 三、代码实现:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档