解题思路:
一开始想用二维数组来做,后来发现可以直接打印,就没有用数组了

在一个二维数组内

 i / j01234
0X


X
1
X
X
2

X

3
X
X
4X


X

仔细观察表格,发现只有对角线和副对角线才有X,而其他的地方是空格

对于对角线上有  i=j;

对于副对角线有  i+j=4;

规律一出来就很简单了,代码实现如下:

#include <stdio.h>
   
int main()
{
    int i,j;
    int a,b,n;
    scanf("%d",&n);
    while(n--){
        scanf("%d %d",&a,&b);
        for(j=0;j<a;j++){//单独打印第一行
            if(j==0||j==a-1){
                printf("X");   
            }else{
                printf(" ");
            }
        }
        printf("\n");
        while(b--){//需要重复b次
            for(i=1;i<a;i++){
                for(j=0;j<a;j++){
                    if(i==j||i+j==a-1){//判断是否在对角线和副对角线上
                        printf("X");
                    }else{
                        printf(" ");
                    }
                }
                printf("\n");
            }
        }
        printf("\n");//数据之间空一行
    }
 
    return 0;
}

不过有三个注意点:

第一,打印的X是大写

第二,每个数据之间有一行空行

第三,第一行需要单独打印


2022-03-19 21:59:11

更新一下吧,发现有很多错误是这个单独打印第一行上出现的,我们来看一下这个答案的输出

image.png

除了第一行以外都是重复出现的,而第一行不是,所以要单独打印第一行,不然的话就会出现:

image.png

重复了三个第一行。

以上。

点赞(0)
 

0.0分

29 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 8 条评论

19176722262 8月前 回复TA
@lyhyao68 问一下,这个测试数据哪里来的啊?
王宸极 8月前 回复TA
为什么我的错了啊,我看你们的解题和题目要求都不一样都对,我的输入格式都相同不对
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
 typedef struct stu
{
	int x;
	int y;

}stu;
int main()
{
	stu arr[15];
	int a;
	while (1)
	{
		scanf("%d", &a);
		if (a >= 1 && a <= 15)
		{
			break;
		}
		else
			printf("请重新输入组数");
	}
	int i = 0;
	for (i = 0; i < a; i++)
	{
		while (1)
		{
			scanf("%d", &arr[i].x);
			if (arr[i].x >= 3 && arr[i].x <= 39)
			{
				break;
			}
			else
				printf("请重新输入DNA大小");
		}
		while (1)
		{
			scanf("%d", &arr[i].y);
			if (arr[i].y >= 1 && arr[i].y <= 20)
			{
				break;
			}
			else
				printf("请重新输入DNA数量");
白熊小将 1年前 回复TA
@lyhyao68 你这个有问题啊
十只小鳄鱼 1年前 回复TA
@uq_52514251541 是这样的
指针原来是套娃的 2年前 回复TA
@uq_52514251541 每个大X连接的时候多了一行,和题目输出仔细对比一下就能发现了,所以要单独打印第一行
uq_52514251541 2年前 回复TA
大佬们,测试没错啊,为啥最后答案错误了呢
#include <stdio.h>
#include <stdlib.h>

/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main(void) 
{
	int n;
	scanf("%d",&n);
	while(n--)
	{
		int a,b;
		scanf("%d%d",&a,&b);
		int i,j;
		while(b--)
		{
			for(i=1;i<=a;i++)
			{	
				for( j=1;j<=a;j++)
				{
					if(i==j||a+1==i+j)
					{
						printf("X");
					}
					else
					{
						printf("%c",32);
				    }
				}
			printf("\n");
			}
		}
		printf("\n");
	}
	return 0;
}
PEACE 2年前 回复TA
lyhyao68 2年前 回复TA
#include<stdio.h>
int main()
{
	int N,i,j,a[16],b[16],t;
	scanf("%d",&N);
	for(i=0;i<N;i++)	
		scanf("%d%d",&a[i],&b[i]);
	for(i=0;i<N;i++)
	{
		while(b[i]!=0)
		{
			for(t=0;t<a[i];t++)
			{
				for(j=0;j<a[i];j++)
				{
				if((j==t)||(t+j==a[i]-1))
					printf("X");
				else  
					printf(" ");
				}
			printf("\n");
			}
			b[i]--;
		}
		printf("\n");
	}
	return 0;
} 
我感觉我这个更简单