首页 > 试题广场 >

叠筐

[编程题]叠筐
  • 热度指数:4744 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
我们需要使用筐的时候,就把一个个大小差一圈的筐叠上去,使得从上往下看时,边筐花色交错。这个工作现在要让计算机来完成,得看你的了。

输入描述:
输入是一个个的三元组,分别是,外筐尺寸n(n为满足1≤n≤79的奇整数),中心花色字符,外筐花色字符,后二者都为ASCII可见字符,输入数据有多组。


输出描述:
输出叠在一起的筐图案,中心花色与外筐花色字符从内层起交错相叠,多筐相叠时,最外筐的角总是被打磨掉。叠筐与叠筐之间应有一行间隔。
示例1

输入

11 * +
5 W @

输出

 +++++++++ 
+*********+
+*+++++++*+
+*+*****+*+
+*+*+++*+*+
+*+*+*+*+*+
+*+*+++*+*+
+*+*****+*+
+*+++++++*+
+*********+
 +++++++++ 

 WWW 
W@@@W
W@W@W
W@@@W
 WWW 
//同样是从外圈向内圈逐步构造缓冲数组的思想,在本地编译器可实现题目要求但在线提交时代码超时,暂时未知问题出在哪里。
#include<stdio.h>
int main() {
	int n;	//外框尺寸
	char a, b;	//a:中心花色字符,b:外框花色字符
	while (scanf("%d %c %c", &n, &a, &b)) {
		char grid[n][n];
		int x = 0, y = 0;
		for (int i = 0; i <= n / 2; i++) {	//i:圈数
			//从左到右
			for (; y < n - i; y++) {
				grid[x][y] = ((i + n / 2) % 2 == 0) ? b : a;
			}
			//从上到下
			for (; x < n - i; x++) {
				grid[x][y] = ((i + n / 2) % 2 == 0) ? b : a;
			}
			//从右到左
			for (; y >= i; y--) {
				grid[x][y] = ((i + n / 2) % 2 == 0) ? b : a;
			}
			//从下到上
			for (; x >= i; x--) {
				grid[x][y] = ((i + n / 2) % 2 == 0) ? b : a;
			}
			x++;
			y++;
		}
		if (n % 2 == 1) grid[n / 2][n / 2] = a;
		grid[0][0] = grid[0][n - 1] = grid[n - 1][0] = grid[n - 1][n - 1] = ' ';
		for (int i = 0; i < n; i++) {
			for (int j = 0; j < n; j++) {
				printf("%c", grid[i][j]);
			}
			printf("\n");
		}
	}
	return 0;
}


发表于 2023-02-02 22:36:11 回复(0)

问题信息

难度:
1条回答 9425浏览

热门推荐

通过挑战的用户

查看代码
叠筐