自测-1 打印沙漏(20 分)
本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印
*****
***
*
***
*****
所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;相邻两行符号数差2;符号数先从大到小顺序递减到1,再从小到大顺序递增;首尾符号数相等。
给定任意N个符号,不一定能正好组成一个沙漏。要求打印出的沙漏能用掉尽可能多的符号。
输入格式:
输入在一行给出1个正整数N(≤1000)和一个符号,中间以空格分隔。
输出格式:
首先打印出由给定符号组成的最大的沙漏形状,最后在一行中输出剩下没用掉的符号数。
输入样例:
19 *
输出样例:
*****
***
*
***
*****
2
思路:
1.算出1000之内所需要的符号数
2.存一边最大符号数
3.打印
AcCode:
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in = new Scanner(System.in);
int N = in.nextInt();
char fh = in.next().charAt(0);
if(N==1) {
}
int[][] nums = new int[23][23];
nums[0][0] = 1;//0-符号最大数
nums[0][1] = 1;//1-起始位
int j=3;
for (int i = 1; i < nums.length; i++) {
nums[i][0] = nums[i-1][0]+j*2;
nums[i][1] = j;
j+=2;
}
int result = 0;
int resultNum = 0;
for (int i = nums.length-1; i>=0; i--) {
if(N>=nums[i][0]) {
result = nums[i][0];
resultNum = nums[i][1];
break;
}
}
for (int i = resultNum; i>=1; i=i-2) {
for (int k = 0; k < (resultNum-i)/2; k++) {
System.out.print(" ");
}
for (int k = 0; k <i; k++) {
System.out.print(fh);
}
System.out.println();
}
for (int i = 3; i <=resultNum; i+=2) {
for (int k = 0; k < (resultNum-i)/2; k++) {
System.out.print(" ");
}
for (int k = 0; k <i; k++) {
System.out.print(fh);
}
System.out.println();
}
System.out.println(N-result);
}
}