本文主要是介绍蓝桥杯2013年第四届真题-打印十字图,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
历届试题 打印十字图
时间限制:1.0s 内存限制:256.0MB
问题描述
小明为某机构设计了一个十字型的徽标(并非红十字会啊),如下所示:
..$$$$$$$$$$$$$..
..$...........$..
$$$.$$$$$$$$$.$$$
$...$.......$...$
$.$$$.$$$$$.$$$.$
$.$...$...$...$.$
$.$.$$$.$.$$$.$.$
$.$.$...$...$.$.$
$.$.$.$$$$$.$.$.$
$.$.$...$...$.$.$
$.$.$$$.$.$$$.$.$
$.$...$...$...$.$
$.$$$.$$$$$.$$$.$
$...$.......$...$
$$$.$$$$$$$$$.$$$
..$...........$..
..$$$$$$$$$$$$$..
对方同时也需要在电脑dos窗口中以字符的形式输出该标志,并能任意控制层数。
提示
请仔细观察样例,尤其要注意句点的数量和输出位置。
思路:
第一行和倒数第一行对称,第二行和倒数第二行对称,第三行和倒数第三行对称。
第一列和倒数第一列对称,第二列和倒数第二列对称,第三列和倒数第三列对称。
可以发现规律n=1 s=9; n=2 s=13;n=3 s=17 可以得出 s=4n+5;
如图所示 n 每减一 ,图形就相应的缩小两圈(占两格),用递归实现,从外圈开始将$占的部分都填满然后递归。终止条件是当循环该结束的时候即 递归调用的次数> s/4 结束
import java.util.Scanner;
public class Main {static char [][]arr;static int s;public static void main(String[] args) {Scanner scanner = new Scanner(System.in);while (scanner.hasNext()) {int n=scanner.nextInt();s=5+n*4;//观察可得,输出的均是5+n*4的矩阵arr=new char[s][s];for(int i=0;i<s;i++) {for(int j=0;j<s;j++) {arr[i][j]='.';//初始化矩阵}}tian(0,s,0);for(int i=0;i<s;i++) {for(int j=0;j<s;j++) {System.out.print(arr[i][j]);}System.out.println();}}}//count是每次递归开始的横坐标,len是每次递归瘦两圈前的最大长度,bu是步数private static void tian(int count,int len,int bu) {if(bu>s/4) { //递归次数大于s/4就退出arr[s/2][s/2]='$'; //填补最中心的点return;}if(count!=0) {//不是第一圈就填上四个角arr[count][count]=arr[count][len-1]=arr[len-1][count]=arr[len-1][len-1]='$';}for(int i=count+2;i<len-2;i++) {//每次递归改变的第一行arr[count][i]=arr[i][count]=arr[len-1][i]=arr[i][len-1]='$';//每次递归改变的第二行if(i==count+2 || i==len-3) {arr[count+1][i]=arr[i][count+1]=arr[len-2][i]=arr[i][len-2]='$';}}//count+2,len-2起到瘦两圈的效果tian(count+2,len-2,bu+1);}
}
这篇关于蓝桥杯2013年第四届真题-打印十字图的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!