历届试题 打印十字图

痛定思痛。 2022-03-01 14:20 105阅读 0赞

蓝桥杯历届试题

  1. ## 打印十字图
  • 此题说白了就是个规律题,第一眼看到的各位朋友应该耐心的看完
  • n==3时的图形

我对此题的规律总结如下:

  1. * 首先用二维数组来保存图形,并初始化为n个正方形相互嵌套,中间有个十字
  2. * 每个正方形的边长为5+4*n,中间十字的长度为5,从中心向四周扩散长度2
  3. * 然后将每个正方形的四个角分别处理,交换对应位置的元素即可,从最里面的正方形开始处理
  4. * 得到正确结果

代码段(java)

  1. package com.yrd.lanqiao.pre;
  2. import java.util.Scanner;
  3. public class Prev_2 {
  4. public static void main(String[] args) {
  5. Scanner input = new Scanner(System.in);
  6. int n = input.nextInt();
  7. int l = 5+4*n;
  8. int mid = l/2+1;
  9. char[][] map = new char[l+10][l+10];
  10. for (int i=1; i<=l; i++) {
  11. for (int j=1; j<=l; j++) {
  12. if(i==1||i==l) {
  13. map[i][j]='$';
  14. } else {
  15. if(j==1||j==l) {
  16. map[i][j]='$';
  17. } else if(i== mid&& (j==mid-2||j==mid-1||j==mid||j==mid+1||j==mid+2)) {
  18. map[i][j]='$';
  19. } else if(j==mid && (i==mid-2||i==mid-1||i==mid+1||i==mid+2)) {
  20. map[i][j]='$';
  21. }else {
  22. map[i][j]='.';
  23. }
  24. }
  25. }
  26. }
  27. for (int cnt=1; cnt<n; cnt++) {
  28. int r1=1+2*cnt, c1=1+2*cnt;
  29. int r2=l-2*cnt, c2=l-2*cnt;
  30. for (int i=1+2*cnt; i<=l-2*cnt; i++) {
  31. map[r1][i] = '$';
  32. map[i][c1] = '$';
  33. map[r2][i] = '$';
  34. map[i][c2] = '$';
  35. }
  36. }
  37. //以上为图形的初始化
  38. //接下来分别处理n个图形的四个角
  39. for (int cnt=1; cnt<=n; cnt++) {
  40. int r1=mid-2-2*cnt, c1=mid-2-2*cnt;
  41. int r2=mid-2-2*cnt, c2=mid+2+2*cnt;
  42. int r3=mid+2+2*cnt, c3=mid-2-2*cnt;
  43. int r4=mid+2+2*cnt, c4=mid+2+2*cnt;
  44. //左上角
  45. change(map,r1,c1,r1+2,c1+1);
  46. change(map,r1,c1+1,r1+2,c1+2);
  47. change(map,r1+1,c1,r1+1,c1+2);
  48. //右上角
  49. change(map,r2,c2,r2+2,c2-1);
  50. change(map,r2,c2-1,r2+2,c2-2);
  51. change(map,r2+1,c2,r2+1,c2-2);
  52. //左下角
  53. change(map,r3,c3,r3-2,c3+1);
  54. change(map,r3,c3+1,r3-2,c3+2);
  55. change(map,r3-1,c3,r3-1,c3+2);
  56. //右下角
  57. change(map,r4,c4,r4-2,c4-1);
  58. change(map,r4,c4-1,r4-2,c4-2);
  59. change(map,r4-1,c4,r4-1,c4-2);
  60. }
  61. for (int i=1; i<=l; i++) {
  62. for (int j=1; j<=l; j++) {
  63. System.out.print(map[i][j]);
  64. }
  65. System.out.println();
  66. }
  67. }
  68. private static void change(char[][] ch, int x1, int y1, int x2, int y2) {
  69. char t;
  70. t = ch[x1][y1];
  71. ch[x1][y1] = ch[x2][y2];
  72. ch[x2][y2] = t;
  73. }
  74. }
  • 注意蓝桥杯的提交,类名为main,不需要包名

发表评论

表情:
评论列表 (有 0 条评论,105人围观)

还没有评论,来说两句吧...

相关阅读