【蓝桥杯】【打印十字图】
2017-11-07 10:57
197 查看
【题目】
![](https://img-blog.csdn.net/20171107110032651?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYmVhcl9odWFuZ3poZW4=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
小明为某机构设计了一个十字型的徽标(并非红十字会啊),如下所示(可参见p1.jpg)
$$$$$$$$$$$$$
$ $
$$$ $$$$$$$$$ $$$
$ $ $ $
$ $$$ $$$$$ $$$ $
$ $ $ $ $ $
$ $ $$$ $ $$$ $ $
$ $ $ $ $ $ $
$ $ $ $$$$$ $ $ $
$ $ $ $ $ $ $
$ $ $$$ $ $$$ $ $
$ $ $ $ $ $
$ $$$ $$$$$ $$$ $
$ $ $ $
$$$ $$$$$$$$$ $$$
$ $
$$$$$$$$$$$$$
对方同时也需要在电脑dos窗口中以字符的形式输出该标志,并能任意控制层数。
为了能准确比对空白的数量,程序要求对行中的空白以句点(.)代替。
输入格式:
一个正整数 n (n<30) 表示要求打印图形的层数
输出:
对应包围层数的该标志。
例如:
用户输入:
1
程序应该输出:
..$$$$$..
..$...$..
$$$.$.$$$
$...$...$
$.$$$$$.$
$...$...$
$$$.$.$$$
..$...$..
..$$$$$..
再例如:
用户输入:
3
程序应该输出:
..$$$$$$$$$$$$$..
..$...........$..
$$$.$$$$$$$$$.$$$
$...$.......$...$
$.$$$.$$$$$.$$$.$
$.$...$...$...$.$
$.$.$$$.$.$$$.$.$
$.$.$...$...$.$.$
$.$.$.$$$$$.$.$.$
$.$.$...$...$.$.$
$.$.$$$.$.$$$.$.$
$.$...$...$...$.$
$.$$$.$$$$$.$$$.$
$...$.......$...$
$$$.$$$$$$$$$.$$$
..$...........$..
..$$$$$$$$$$$$$..
请仔细观察样例,尤其要注意句点的数量和输出位置。
资源约定:
峰值内存消耗(含虚拟机) < 64M
CPU消耗 < 1000ms
请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。
所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
注意:不要使用package语句。不要使用jdk1.6及以上版本的特性。
注意:主类的名字必须是:Main,否则按无效代码处理。
【分析】
需要将图形对应成二维数组,包围层数分别是1、2、3、4...时,
对应的二维数组规模是9x9、13x13、17x17、21x21...
可以发现公式,二维数组的规模数值 r = 9+(c-1)*4
内圈距离最外圈的距离是 2*(最外圈层数-该圈层数)
【源码】
小明为某机构设计了一个十字型的徽标(并非红十字会啊),如下所示(可参见p1.jpg)
$$$$$$$$$$$$$
$ $
$$$ $$$$$$$$$ $$$
$ $ $ $
$ $$$ $$$$$ $$$ $
$ $ $ $ $ $
$ $ $$$ $ $$$ $ $
$ $ $ $ $ $ $
$ $ $ $$$$$ $ $ $
$ $ $ $ $ $ $
$ $ $$$ $ $$$ $ $
$ $ $ $ $ $
$ $$$ $$$$$ $$$ $
$ $ $ $
$$$ $$$$$$$$$ $$$
$ $
$$$$$$$$$$$$$
对方同时也需要在电脑dos窗口中以字符的形式输出该标志,并能任意控制层数。
为了能准确比对空白的数量,程序要求对行中的空白以句点(.)代替。
输入格式:
一个正整数 n (n<30) 表示要求打印图形的层数
输出:
对应包围层数的该标志。
例如:
用户输入:
1
程序应该输出:
..$$$$$..
..$...$..
$$$.$.$$$
$...$...$
$.$$$$$.$
$...$...$
$$$.$.$$$
..$...$..
..$$$$$..
再例如:
用户输入:
3
程序应该输出:
..$$$$$$$$$$$$$..
..$...........$..
$$$.$$$$$$$$$.$$$
$...$.......$...$
$.$$$.$$$$$.$$$.$
$.$...$...$...$.$
$.$.$$$.$.$$$.$.$
$.$.$...$...$.$.$
$.$.$.$$$$$.$.$.$
$.$.$...$...$.$.$
$.$.$$$.$.$$$.$.$
$.$...$...$...$.$
$.$$$.$$$$$.$$$.$
$...$.......$...$
$$$.$$$$$$$$$.$$$
..$...........$..
..$$$$$$$$$$$$$..
请仔细观察样例,尤其要注意句点的数量和输出位置。
资源约定:
峰值内存消耗(含虚拟机) < 64M
CPU消耗 < 1000ms
请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。
所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
注意:不要使用package语句。不要使用jdk1.6及以上版本的特性。
注意:主类的名字必须是:Main,否则按无效代码处理。
【分析】
需要将图形对应成二维数组,包围层数分别是1、2、3、4...时,
对应的二维数组规模是9x9、13x13、17x17、21x21...
可以发现公式,二维数组的规模数值 r = 9+(c-1)*4
内圈距离最外圈的距离是 2*(最外圈层数-该圈层数)
【源码】
public static void main(String[] args) { Scanner sc = new Scanner(System.in); int cc = sc.nextInt(); sc.close(); int r = 9 + (cc-1)*4; char[][] a = new char[r][r]; // setT(a); //画中间的十字形状 for (int i = (r-1)/2-2; i <= (r-1)/2+2; i++) { a[i][(r-1)/2] = '$'; a[(r-1)/2][i] = '$'; } // printT(a); //一圈一圈的画出来,先画里面的圈 for (int c = 1; c <= cc; c++) { //关键点,把该圈距外层的距离算出来,这是一个相对量 int interval = 2*(cc-c); for (int i = 0+interval; i < r-interval; i++) { for (int j = 0+interval; j < r-interval; j++) { if(a[i][j] == '$' || a[i][j] == '.'){ if(i==2+interval || i==r-3-interval){ //第三行和倒数第三行 if(j==2+interval || j==r-3-interval){ a[i][j] = '$'; } } continue; } if(i==0+interval || i==(r-1)-interval){ //第一行和最后一行 if(j>=2+interval && j<=r-3-interval){ a[i][j] = '$'; }else{ a[i][j] = '.'; } } if(i==1+interval || i==r-2-interval){ //第二行和倒数第二行 if(j==2+interval || j==r-3-interval){ a[i][j] = '$'; }else{ a[i][j] = '.'; } } if(i==2+interval || i==r-3-interval){ //第三行和倒数第三行 if(j==3+interval || j==r-4-interval){ a[i][j] = '.'; }else{ a[i][j] = '$'; } } if(i >2+interval && i<r-3-interval){ //其余的行 if(j==0+interval || j==r-1-interval){ a[i][j] = '$'; }else{ a[i][j] = '.'; } } } } // printT(a); } printT(a); } private static void printT(char[][] a){ for (int i = 0; i < a.length; i++) { for (int j = 0; j < a[i].length; j++) { System.out.print(a[i][j]); } System.out.println(); } System.out.println("***********************************************"); } private static void setT(char[][] a){ for (int i = 0; i < a.length; i++) { for (int j = 0; j < a[i].length; j++) { a[i][j] = '#'; } } }
相关文章推荐