古风排版(模拟)

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

输入格式:

输入在第一行给出一个正整数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>
int main(){
	int n;
	scanf("%d",&n);
	getchar();
	char s[1005];
	char b[1005][1005]={0};
	gets(s);
	int len;
	len=strlen(s);
	int m=(len%n==0 ? len/n : len/n+1);  //计算出列数 
//	printf("%d %d\n",n,m);
	int k=0;
	for(int j=m-1;j>=0;j--){ //从最后一列放 
		for(int i=0;i<n;i++){//从第一行依次放满第j列 
			if(k<len) b[i][j]=s[k];
			else b[i][j]=' ';//空格补齐 
			k++;
		}
	}
	for(int i=0;i<n;i++){
		for(int j=0;j<m;j++)
		  printf("%c",b[i][j]);
		printf("\n");
	}

	   
return 0;
}

方案二:转化为二维数组依次存放,之后顺时针旋转90度输出,可能好想一点~~(来源某个学妹的想法~~)

如: 4

       12345

       第一步:                                第二步

       1234                                    51

       5                                            2

                                                     3

扫描二维码关注公众号,回复: 2302072 查看本文章

                                                     4

#include<stdio.h>
#include<string.h>
const int N = 1005;

int main(){
    char str[N];
    char mp[N][N];
	int n;
	scanf("%d",&n);
	getchar();
	gets(str);
	int len=strlen(str);
	int m=(len%n==0?len/n:len/n+1);
	int k=0;
	//行列置换 
	for(int i=0;i<m;i++){
		for(int j=0;j<n;j++){
			if(k<len) mp[i][j]=str[k];
			else mp[i][j]=' ';
			k++;
		}
	}
	for(int j=0;j<n;j++){//按列打印 
		for(int i=m-1;i>=0;i--)//从每一列的最后一个打印 
		   printf("%c",mp[i][j]);
		puts("");
	}
	return 0;
}
核心:牢记i代表行号(第一维),j代表列号(第二维),最好养成用i,j代表固定维的习惯,这样不至于混乱~~

                      

猜你喜欢

转载自blog.csdn.net/islittlehappy/article/details/81001041