1027 打印沙漏
本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定 17 个“*”,要求按下列格式打印
*****
***
*
***
*****
*****
***
*
***
*****
所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;相邻两行符号数差 2;符号数先从大到小顺序递减到 1,再从小到大顺序递增;首尾符号数相等。
给定任意 N 个符号,不一定能正好组成一个沙漏。要求打印出的沙漏能用掉尽可能多的符号。
输入格式:
输入在一行给出 1 个正整数 N(≤1000)和一个符号,中间以空格分隔。
输出格式:
首先打印出由给定符号组成的最大的沙漏形状,最后在一行中输出剩下没用掉的符号数。
输入样例:
tex
19 *
19 *
输出样例:
tex
*****
***
*
***
*****
2
*****
***
*
***
*****
2
Solution:
java
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
String[] input = in.readLine().split(" ");
int n = Integer.parseInt(input[0]);
String shape = input[1];
int row = 1, need = 1, i;
for (i = 3; 2 * i + need <= n; i += 2) {
need += 2 * i;
row++;
}
i -= 2;
StringBuilder sb = new StringBuilder();
for (int j = 0; j < row; j++) {
for (int k = 0; k < j; k++) {
sb.append(" ");
}
for (int k = 0; k < i; k++) {
sb.append(shape);
}
sb.append("\n");
i -= 2;
}
i += 4;
for (int j = row - 2; j >= 0; j--) {
for (int k = 0; k < j; k++) {
sb.append(" ");
}
for (int k = 0; k < i; k++) {
sb.append(shape);
}
sb.append("\n");
i += 2;
}
System.out.printf("%s%d", sb, n - need);
}
}
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
String[] input = in.readLine().split(" ");
int n = Integer.parseInt(input[0]);
String shape = input[1];
int row = 1, need = 1, i;
for (i = 3; 2 * i + need <= n; i += 2) {
need += 2 * i;
row++;
}
i -= 2;
StringBuilder sb = new StringBuilder();
for (int j = 0; j < row; j++) {
for (int k = 0; k < j; k++) {
sb.append(" ");
}
for (int k = 0; k < i; k++) {
sb.append(shape);
}
sb.append("\n");
i -= 2;
}
i += 4;
for (int j = row - 2; j >= 0; j--) {
for (int k = 0; k < j; k++) {
sb.append(" ");
}
for (int k = 0; k < i; k++) {
sb.append(shape);
}
sb.append("\n");
i += 2;
}
System.out.printf("%s%d", sb, n - need);
}
}