古风排版(PAT)

古风排版(20 分)

中国的古人写文字,是从右向左竖向排版的。本题就请你编写程序,把一段文字按古风排版。

输入格式:

输入在第一行给出一个正整数N(<100),是每一列的字符数。第二行给出一个长度不超过1000的非空字符串,以回车结束。

输出格式:

按古风格式排版给定的字符串,每列N个字符(除了最后一列可能不足N个)。

输入样例:

4
This is a test case

输出样例:

asa T
st ih
e tsi
 ce s

看了很多篇博客总结出来了一个比较简单的规律和做法,希望大家能够喜欢!!! 

思路:

首先创建一个二维数组,
然后将输入的字符串按从左到右的顺序依次从二维数组的倒数第一列开始装入,装满装第二列,以此类推....

 

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main(void)
{
    int num,line,list; //line是行,list 是列 
    int k=0,i,j;
    char str[1005],b[105][1005];//b是用来输出的二维数组 
    
    scanf("%d",&num);
    getchar();//用getchar函数吃掉“回车”否则gets()会接收,影响输入 
    gets(str);

    line=num;//输入的num就是行数

    if(strlen(str)%num==0)//判断列数 
        list=strlen(str)/num;
    else
        list=strlen(str)/num+1; 
 
    for(i=0;i<line;i++)
        b[i][0]=' ';//将二维数组的第1列均设为空格,若单词不够长也有空格输出 
        
    for(j=list-1;j>=0;j--)//开始将字符串装入二维数组(最后一列开始) 
        for(i=0;i<line;i++)//第一行开始 
        {
            b[i][j]=str[k++];
            if(k==strlen(str))
                break;
        }
    
    for(i=0;i<line;i++)
    {
        for(j=0;j<list;j++)
            putchar(b[i][j]); 
        if(i<line-1)
            printf("\n");
    }
    
    return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_43901998/article/details/86670838