您的位置:首页 > 其它

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

2013-06-02 20:00 309 查看
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;
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  蓝桥杯 39阶梯