5-7
中国的古人写文字,是从右向左竖向排版的。本题就请你编写程序,把一段文字按古风排版。
输入格式:
输入在第一行给出一个正整数NN(<100<100),是每一列的字符数。第二行给出一个长度不超过1000的非空字符串,以回车结束。
输出格式:
按古风格式排版给定的字符串,每列NN个字符(除了最后一列可能不足NN个)。
输入样例:
4
This is a test case
输出样例:
asa T
st ih
e tsi
ce s
呃呃呃,我又来填坑了,之前是大一用C写的,通过不了所有的数据,而且实现的也不优雅。。。
今天用重做了这道题,这个思路应该是比较正确和优雅的,数据都能过
第一层循环控制层数,这是无口厚非的
第二层循环需要找一下第一个数字的规律,仔细找一下应该也不难发现
#include<stdio.h>
#include<string.h>
int main() {
char s[1005];
int n;
scanf("%d", &n);
getchar(); // 这里确实很狗血,没办法,C语言输入的时候会读回车,用这个抵消一下
gets(s);
int len = strlen(s);
int y = (len-1) / n;
for (int i = 0; i < n; i++) {
for (int j = n * y + i; j >= i; j -= n) {
if (j >= len) {
printf(" ");
} else {
printf("%c", s[j]);
}
}
printf("\n");
}
}
java实现
package test;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
sc.nextLine(); // 同样的原因,当然java可以改,但是我懒得改了。。
String s = sc.nextLine();
int len = s.length();
int y = (len-1) / n;
for (int i = 0; i < n; i++) {
for (int j = n * y + i; j >= i; j -= n) {
if (j >= len) {
System.out.print(" ");
} else {
System.out.print(s.charAt(j));
}
}
System.out.println();
}
}
}