题目:
蓝桥杯历届试题:打印十字图
一开始看到这个问题的时候自己也是完全找不到头脑,而且经过仔细一想之后,这个图本身就有误导作用,因为它看起来根本就是像一个长方形,会严重影响你的思路,建议大家在草稿纸上重新把图画一下,然后你会发现这是一个正方形,并且这个图和标准正方形一样拥有四个对称轴,然后你就会发现其实不难。

我的思路是:完成它的一半,然后根据对称原则复制另半个正方形。
蓝桥杯历届试题:打印十字图
根据图上线索,你会发现再多层的十字图由内到外都有一个规律,依次是1,5,9,13个美元符递增4个,并且竖着的行每第一个和最后一个美元符向下产生两个符号,你会发现,当你想到这一步时,算法基本上也就可以去实现了。

以下是java算法:

import java.util.Scanner;

//打印十字
public class Main {
	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		int x = in.nextInt();
		int row = 4*x+5;
		int col = row;
		//全部定义为.的二维字符数组
		char word[][] = new char[row][col];
		for(int m=0;m<row;m++) {
			for(int n=0;n<col;n++) {
				word[m][n]='.';
			}
		}
		
		//开始改变内部结构
		//1
		int index = (row-3)/2;
		
		int fi = (index+1)/2;
		int finger = fi;
		for(int m=0;m<index;m=m+2) {
			int n=m+2;
			//首个'$'符向下延伸两个‘$’
			word[m+1][n] = '$';
			word[m+2][n] = '$';
			for(n=0+m;n<4*finger-3+m;n++) {
				word[m][n+2]='$';
				
			}
			//最后一个'$'符向下延伸两个‘$’
			word[m+1][n+1] = '$';
			word[m+2][n+1] = '$';
			finger--;
		}
		//2
		//复原finger
		finger = fi;
		for(int m=0;m<index;m=m+2) {
			int n=m+2;
			//首个'$'符向下延伸两个‘$’
			word[n][m+1] = '$';
			word[n][m+2] = '$';
			
			for(n=0+m;n<4*finger-3+m;n++) {
				word[n+2][m]='$';
				
			}
			finger--;
			//末尾'$'符向下延伸两个‘$’
			word[n+1][m+1] = '$';
			word[n+1][m+2] = '$';
			
		}
		//复制右上角部分
		for(int a=0;a<(word.length+1)/2;a++) {
			for(int b=0;b<(word.length+1)/2;b++) {
				word[a][word.length-b-1]=word[a][b];
			}
		}
		//以上半个二维字符数组复制下半个
		for(int a=0;a<word.length;a++) {
			for(int b=0;b<word.length;b++) {
				word[word.length-b-1][a] = word[b][a];
			}
		}
		
		//打印十字图形
		for(int m=0;m<row;m++) {
			for(int n=0;n<col;n++) {
				System.out.print(word[m][n]);
			}
			System.out.println();
		}
	}
}

大致的步骤就是将二维数组全部元素定义为‘.’,然后通过修改内部结构完成十字图的输出。
这个算法是我脑海里第一个想到的,肯定还会有更简单的算法,有想法的小伙伴欢迎在文章下面评论交流喔。

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-08-28
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-06-02
  • 2021-10-08
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-07-17
相关资源
相似解决方案