解题思路: 每一组的总行数为 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分
9 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复