1.题目
L1-039 古风排版 - 团体程序设计天梯赛-练习集 (pintia.cn)
中国的古人写文字,是从右向左竖向排版的。本题就请你编写程序,把一段文字按古风排版。
输入格式:
输入在第一行给出一个正整数N(<100),是每一列的字符数。第二行给出一个长度不超过1000的非空字符串,以回车结束。
输出格式:
按古风格式排版给定的字符串,每列N个字符(除了最后一列可能不足N个)。
输入样例:
4
This is a test case
输出样例:
asa T
st ih
e tsi
ce s
2.题解代码
#include<bits/stdc++.h>
using namespace std;
char abac[1000][1000];
int main(){
memset(abac, ' ', sizeof(abac));
int n;cin>>n;
char a[2024];
getchar();
fgets(a, sizeof(a), stdin);
int len=strlen(a);
if (a[len - 1] == '\n') {
a[len - 1] = ' ';
len--;
}
int cnt=0;
if(len%n>0){
cnt=len/n+1;
}else{
cnt=len/n;
}
int x,y;
for(int i=0;i<len+1;i++){
x=i%n;
y=i/n;
abac[x][cnt-y-1]=a[i];
}
for(int i=0;i<n;i++){
for(int j=0;j<cnt;j++){
cout<<abac[i][j];
}
cout<<"\n";
}
return 0;
}
3.知识点分析
3.1 memset()
这个是给数组赋基础值的函数,比如题解代码中就是给abac[][]这个二维数组的基础值都设置成空格,防止数组越界导致数据输出不出来
memset(abac, ' ', sizeof(abac));
3.2 fgets()
fgets(a, sizeof(a), stdin);
这个函数是用来输入一整行的字符,到最后一个字符后再加上一个换行符结束,所以此时的字符串长度的原本的字符串长度加一,为了后面写题时的方便,一般搭配下面这几句来把换行符删除,并把字符串长度恢复成原本的字符串长度
if (a[len - 1] == '\n') {
a[len - 1] = ' ';
len--;
}
4.本题的注意事项
一定要把数组赋原始值,防止数组越界导致结果输出不出来!!!!!!