解题思路: 每一组的总行数为 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 人评分
上车人数 (C语言代码)浏览:1257 |
C语言训练-求具有abcd=(ab+cd)2性质的四位数 (C语言代码)浏览:1392 |
C语言训练-求函数值 (C语言代码)浏览:944 |
高精度加法 (C++代码)(大数加法)浏览:1008 |
C语言程序设计教程(第三版)课后习题11.5 (C语言代码)浏览:932 |
【蟠桃记】 (C语言代码)浏览:697 |
WU-字符串比较 (C++代码)浏览:824 |
2004年秋浙江省计算机等级考试二级C 编程题(1) (C语言代码)浏览:539 |
C语言程序设计教程(第三版)课后习题7.5 (C语言代码)浏览:712 |
数列问题 (C语言代码)浏览:1068 |