第四届蓝桥杯竞赛打印十字图案问题

来源:互联网 发布:应用数据备份 编辑:程序博客网 时间:2024/04/29 11:44
i
import java.util.Scanner;public class PrintPictrue {//定义一个字符数组private static char[][] p;private static int roundMount;//输入图案层数private static int l;//数组长度private static char initChar = '.';//初始填充的字符private static char fillChar = '$';//显示图案的字符public static void main(String[] args) {roundMount = new Scanner(System.in).nextInt();//用户输入参数l = 9 + (roundMount - 1) * 4;p = new char[l][l];initP(); // 初始化数组fillJiShuLine();fillOuShuLine();fillCenterLine();print();// 打印出来}//填充偶数行0、2、4...private static void fillOuShuLine() {for (int r = 0; r < roundMount * 2+2; r += 2) {for (int n = 2 + r; n <= l / 2; n++) {symmetryFill(r, n);}// 第0行时,不填充条件二if (r == 0)continue;// 如果不越界则填充 。。。.$$$.。。。.$$$.。。。if ((r - 2) >= 0) {int n = r;// 对称填充symmetryFill(r, n);symmetryFill(r, n - 1);symmetryFill(r, n - 2);}//if (r == 2)continue;for (int n = r - 4; n >= 0; n -= 2) {symmetryFill(r, n);}}}//填充奇数行1、3、5...private static void fillJiShuLine() {for (int r = 1; r < roundMount * 2+2; r += 2) {int n = 1 + r;symmetryFill(r, n);// 第0行时,不填充条件二if (r == 1)continue;// 如果不越界则填充 。。。.$$$.。。。.$$$.。。。if ((r - 3) >= 0) {n = r-3;// 对称填充symmetryFill(r, n);}//if (r == 3)continue;for (n = r - 5; n >= 0; n -= 2) {symmetryFill(r, n);}}}//填充中间行private static void fillCenterLine(){symmetryFill(l/2,l/2);symmetryFill(l/2,l/2-1);symmetryFill(l/2,l/2-2);int n,r=l/2;for (n = r - 4; n >= 0; n -= 2) {symmetryFill(r, n);}}private static void print() {for (int i = 0; i < l; i++) {for (int j = 0; j < l; j++) {System.out.print(p[i][j]);}System.out.println();}}//初始化赋值private static void initP() {for (int i = 0; i < l; i++)for (int j = 0; j < l; j++) {p[i][j] = initChar;}}//对称填充private static void symmetryFill(int x, int y) {p[x][y] = p[l - x - 1][y] = p[x][l - y - 1] = p[l - x - 1][l - y - 1] = fillChar;}}


原创粉丝点击