【java_蓝桥杯算法训练】算法训练 输出米字形

算法训练 输出米字形

资源限制

时间限制:1.0s   内存限制:512.0MB

  根据输入的正整数n (1  米字形由一个(2n-1)*(2n-1)的矩阵组成,矩阵包含从大写A开始的n个字母
  例如:n=3时,包含A,B,C;n=4时,包含A,B,C,D。
  矩阵的正中间为n个字母中字典序最大的那个,从这个字母开始,沿着西北、正北、东北、正西、正东、西南、正南、东南八个方向各有一条由大写字母组成的直线。并且直线上的字母按字典序依次减小,直到大写字母A。
  矩阵的其它位置用英文句号.填充。



  样例输入一

  3


  样例输出一

  A.A.A
  .BBB.
  ABCBA
  .BBB.
  A.A.A


  样例输入二

  4



  样例输出二

  A..A..A
  .B.B.B.
  ..CCC..
  ABCDCBA
  ..CCC..
  .B.B.B.
  A..A..A


分析:

本题目要求是输出米字形,要求是 正整数n (1  米字形由一个(2n-1)*(2n-1)的矩阵组成。把他当作数组来进行模拟,也就是一个二位数组行和列都是2*n-1,数组中心数为n的值 例如:n=3时,包含A,B,C;n=4时,包含A,B,C,D。根据样例输出可以数组最中心的值为n,我们可以使用char(64+n)来表示,分为西北、正北、东北、正西、正东、西南、正南、东南八个方向来做,这类题目不难就是比较麻烦,掌握其规律就比较容易了。

代码详细解读:


import java.util.Iterator;
import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc=new Scanner(System.in);
		//用n来接受n传入的值
		int n=sc.nextInt();
		//定义一个char类型的二位数组,用来存放[2*n-1][2*n-1]个大小的数据;
		char arr[][]=new char[2*n-1][2*n-1];
		//对数组进行初始化,设置为'.'
		for (int i = 0; i < 2*n-1; i++) {
			for (int j = 0; j < 2*n-1; j++) {
				arr[i][j]='.';
			}
		}
		//我们先设置好数组的中心arr[n-1][n-1]为中心
		char c=(char) (64+n);
		//给数组中心赋值为(64+n)也就是大写字母
		arr[n-1][n-1]=c;
		//给西北方向赋值i和j没次-1
//		22——>11——>00这样的格式,然后按照arr[i+1][i+1]-1,对下一个就等于的上一个-1
		//西北
		
		for (int i = n-2; i>-1; i--) {
			arr[i][i]=(char) (arr[i+1][i+1]-1);
		}
//		和西北大致相同
//		东南是i-1 j+1的格式进行可以
		//东南
		for (int i = n; i<2*n-1; i++) {
			arr[i][i]=(char) (arr[i-1][i-1]-1);
		}
//	和东南类似
		//东北
		int u=n;
		for (int i = n-2; i>=0; i--) { 
			arr[i][u]=(char) (arr[i+1][u-1]-1);
			u++;
		}
//		正南和正北只需要对y的值进行变化即可
		//西南
		int k=n-2;
     for (int i = n;i<2*n-1; i++) {
	   arr[i][k]=(char) (arr[i-1][k+1]-1);
	   k--;
	}
    
     //正北
     for (int i = n-2; i >-1; i--) {
		arr[i][n-1]=(char) (arr[i+1][n-1]-1);
	}
//     正西和正东只需要对x的值进行变化即可
     //正西
     for (int i = n; i<2*n-1; i++) {
		arr[i][n-1]=(char) (arr[i-1][n-1]-1);
	}
     
     //正东
     for (int i = n; i <2*n-1; i++) {
		arr[n-1][i]=(char) (arr[n-1][i-1]-1);
		}
     
     //正西
     for (int i = n-2; i>=0; i--) {
		arr[n-1][i]=(char) (arr[n-1][i+1]-1);
	}
     for (int i = 0; i < 2*n-1; i++) {
    		for (int j = 0; j <2*n-1 ; j++) {
    			if(arr[i][j]!=' ')
    			System.out.print(arr[i][j]);
    		}
    		System.out.println();
    	}
 	}
	}
上一篇:微信pc网页扫码授权登录php


下一篇:数组使用注意事项