7-7 古风排版(20 分)
中国的古人写文字,是从右向左竖向排版的。本题就请你编写程序,把一段文字按古风排版。
输入格式:
输入在第一行给出一个正整数N(<100),是每一列的字符数。第二行给出一个长度不超过1000的非空字符串,以回车结束。
输出格式:
按古风格式排版给定的字符串,每列N个字符(除了最后一列可能不足N个)。
输入样例:
4
This is a test case
输出样例:
asa T
st ih
e tsi
ce s
我来说说我的思路吧,将给出的字符串切分得到长度与正整数N相除,如果不是正整数N的倍数就要加一列,就好比长度是20,刚好是N=4的倍数(取模),列数就直接是5,如果长度是19,不是4的倍数,19/4 得到3就要增加一列,让他变成4列才对多以要加1,知道列数接下来就好办了,一个for循环控制列数,for循环里面一个while循环控制行数,使得元素是从右边开始从上到下,每一次for循环都是往左边走知道元素全部放入二维数组中
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int c = scanner.nextInt(); //每一列的字符数 其实就是行数
scanner.nextLine();
String s = scanner.nextLine();
String[] split = s.split("");
int r = 0; //用来记录输入字符串的角标
int column; //列数 最后一列
int n =0; //控制行数递增
if (s.length()%c ==0) column = s.length()/c;
else column = s.length()/c+1; //如果不是行数的倍数则要加一列
int cc = column-1 ; //从最后一列开始
String[][] str = new String[c][column];
for (int i = 0; i
//列
while (n
if (r==split.length) break; //全部字符都放入数组中直接退出
str[n++][cc] = split[r++]; //保证每一个元素都是从上到下
}
if (r==split.length) break;
cc--; //列数减一
n = 0; //行数为0 从0开始
}
for (int i = 0; i
for (int j = 0;j < column; j++) { //列
if (str[i][j]!=null)
System.out.print(str[i][j]+"");
else System.out.print(" ");
}
System.out.println();
}
}
}
截图