蓝桥杯-打印十字图
历届试题 打印十字图 时间限制:1.0s 内存限制:256.0MB 提交此题 锦囊1 锦囊2 问题描述 小明为某机构设计了一个十字型的徽标(并非红十字会啊),如下所示: ..$$$$$$$$$$$$$.. ..$...........$.. $$$.$$$$$$$$$.$$$ $...$.......$...$ $.$$$.$$$$$.$$$.$ $.$...$...$...$.$ $.$.$$$.$.$$$.$.$ $.$.$...$...$.$.$ $.$.$.$$$$$.$.$.$ $.$.$...$...$.$.$ $.$.$$$.$.$$$.$.$ $.$...$...$...$.$ $.$$$.$$$$$.$$$.$ $...$.......$...$ $$$.$$$$$$$$$.$$$ ..$...........$.. ..$$$$$$$$$$$$$.. 对方同时也需要在电脑dos窗口中以字符的形式输出该标志,并能任意控制层数。 输入格式 一个正整数 n (n<30) 表示要求打印图形的层数。 输出格式 对应包围层数的该标志。 样例输入1 1 样例输出1 ..$$$$$.. ..$...$.. $$$.$.$$$ $...$...$ $.$$$$$.$ $...$...$ $$$.$.$$$ ..$...$.. ..$$$$$.. 样例输入2 3 样例输出2 ..$$$$$$$$$$$$$.. ..$...........$.. $$$.$$$$$$$$$.$$$ $...$.......$...$ $.$$$.$$$$$.$$$.$ $.$...$...$...$.$ $.$.$$$.$.$$$.$.$ $.$.$...$...$.$.$ $.$.$.$$$$$.$.$.$ $.$.$...$...$.$.$ $.$.$$$.$.$$$.$.$ $.$...$...$...$.$ $.$$$.$$$$$.$$$.$ $...$.......$...$ $$$.$$$$$$$$$.$$$ ..$...........$.. ..$$$$$$$$$$$$$.. 提示 请仔细观察样例,尤其要注意句点的数量和输出位置。
这个题一步步的来,找规律还是做得出来的,除非一开始就看昏的,被这个给下到了
大概步骤:先找到n和行列的关系,k=5+*i,然后打印中间的十字形,再打印不带四角的“回”字
然后再将四个角补上
import java.util.Scanner; public class 回字 { public static void main(String[] args) { Scanner sc=new Scanner(System.in); int n=sc.nextInt(); getHui(n); } private static void getHui(int k) { int n=5+k*4; String[][] arr=new String[n][n]; for (int i = 0; i < arr.length; i++) { for (int j = 0; j < arr.length; j++) { arr[i][j]="."; } } //添加中间的十字形 int d=n/2; arr[d][d]="$"; arr[d-2][d]=arr[d-1][d]=arr[d+1][d]=arr[d+2][d]="$"; arr[d][d-2]=arr[d][d-1]=arr[d][d+1]=arr[d][d+2]="$"; //回字部分 for (int i = 0; i < arr.length; i++) { for (int j = 0; j < arr.length; j++) { if(i%2==0&&(i<d-2||i>d+2)&&(j+(i+2)*2)<n){ arr[i][j+i+2]="$"; arr[j+i+2][i]="$"; }else if(i%2==0&&i>d+2&&((j-i)+1)<0&&j>n-i){ arr[i][j]="$"; arr[j][i]="$"; } } } //加角 for (int i = 0; i < k; i++) { arr[d-3-i*2][d-2-i*2]="$"; arr[d-2-i*2][d-2-i*2]="$"; arr[d-2-i*2][d-3-i*2]="$"; arr[d-2-i*2][d+2+i*2]="$"; arr[d-3-i*2][d+2+i*2]="$"; arr[d-2-i*2][d+3+i*2]="$"; arr[d+3+i*2][d+2+i*2]="$"; arr[d+2+i*2][d+2+i*2]="$"; arr[d+2+i*2][d+3+i*2]="$"; arr[d+3+i*2][d-2-i*2]="$"; arr[d+2+i*2][d-2-i*2]="$"; arr[d+2+i*2][d-3-i*2]="$"; } //打印结果 for (int i = 0; i < arr.length; i++) { for (int j = 0; j < arr.length; j++) { System.out.print(arr[i][j]); } System.out.println(); } } }