给大家分享一句我很喜欢我话:
知不足而奋进,望远山而前行!!!
铁铁们,成功的路上必然是孤独且艰难的,但是我们不可以放弃,远山就在前方,但我们能力仍然不足,所有我们更要奋进前行!!!
今天我们更新了古风排版内容,
🎉 欢迎大家关注🔍点赞👍收藏⭐️留言📝
一、题目描述:
二、思路解析:
这个题的思路大概就是,我们得到有几行之后,输入字符串之后,需要知道一共需要几列,然后算出一共几列,然后记录一下,然后按题目中的情况去存入字符数组,注意,这里我们是要用二维数组,不明白二维数组的,可以去前面看一下这篇文章,关于C语言数组的认识(1)-CSDN博客
我在这篇文章中讲述了二维数组,然后逐步存入之后,我们就可以输出了。
这道题目的主要思路可以分为以下几个步骤:
读取输入:首先读取输入的正整数N,表示每一列的字符数,以及字符串。
确定列数:根据输入的字符串长度和N,可以计算出总共需要多少列。这里需要注意的是,最后一列可能不足N个字符。
创建二维数组:创建一个二维字符数组,大小为[N][列数],用来存储排版后的字符串。
从右向左填充字符:从输入的字符串末尾开始,从右向左逐个取字符,并按照古风排版的方式填入二维数组中。古风排版是从右向左竖向排版的,所以在二维数组中每一列上的字符应该是原字符串从右向左取得的。
输出结果:最后遍历二维数组,按照每列输出N个字符的方式输出排版后的字符串。
这个算法的关键在于如何将输入的字符串按照古风排版的方式填入二维数组中,然后再按照要求输出即可。这里的代码示例中已经包含了这个过程的实现。
三、代码实现:
C++版本:
#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语言版本:
#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;
}