解题思路: 每一组的总行数为 a*b-(b-1)
前端的空白个数数顺序 从 0 递增到(a-1/2)个空白 再递减到 0
因为每行都有a位 中间部分的空白个数为 (a-2(相当于2个X)-前端的空白*2)
a+1/2行 以及 从 a+1/2行开始 递增 a-1行的不需要输出第二个X
行数为a*b-(b-1)
行数 前空白个数 中空白个数
XoooX 1 0 x 3 x
oXoXo 2 1 x 1 x
ooXoo 3 2 x
oXoXo 4 1 x 1 x
XoooX 5 0 x 3 x
oXoXo 6 1 x 1 x
ooXoo 7 2 x
oXoXo 8 1 x 1 x
XoooX 9 0 x 3 x
参考代码:
import java.util.Scanner; public class Test01 { public static void main(String[] args) { Scanner scanner=new Scanner(System.in); int n[][]=new int [scanner.nextInt()][2]; for (int i = 0; i < n.length; i++) {//存入二维数组 for (int j = 0; j < n[i].length; j++) { n[i][j]=scanner.nextInt(); } } for (int i = 0; i < n.length; i++) { //循环组 int a=n[i][0]*n[i][1]-(n[i][1]-1); //获得该组总行数 int k1=0;//记录前端空白 int t=1;//控制前端空白 int p=0;//记录行数 for (int j = 1; j <= a; j++) { //循环行 for (int j2 = 0; j2 < k1; j2++) { //输出前端空白 System.out.print(" "); } if (k1==0) { //达到0后前端空白开始递增 t=1; } else if(k1==(n[i][0]-1)/2){ //达到要求后前端空白开始递减 t=-1; } System.out.print("X");//输出第一个X for (int j2 = 0; j2 < n[i][0]-2-(k1*2); j2++) { //中间部分空白 System.out.print(" "); } if (j==(n[i][0]+1)/2) { p=1; } k1+=t; //控制前端空白 p++; if (j==(n[i][0]+1)/2||p==n[i][0]) { //找到只有一个X的行 p=1; System.out.println(); continue; //跳出不打印第二个X } System.out.println("X");//输出第二个X } System.out.println(); } } }
0.0分
11 人评分
1126题解浏览:577 |
罗列完美数 (C语言代码)浏览:488 |
1054题解浏览:460 |
字符串比较 (C语言代码)浏览:679 |
班级人数 (C语言代码)浏览:919 |
C语言程序设计教程(第三版)课后习题5.5 (C语言代码)浏览:525 |
【偶数求和】 (C语言代码)浏览:430 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:443 |
整数分类 oj上总是wrong answer浏览:661 |
WU-蛇行矩阵 (C++代码)浏览:633 |