变换多姿的图案

  1. 十字型的徽标(递归)
    这里写图片描述
package org.vo;
import java.util.Scanner;
public class text8 {
        /*
        * 十字型的徽标
        */
        public static void main(String[] args) {
        Scanner scann=new Scanner(System.in);
        int num=Integer.parseInt(scann.next());
        int num1=9+(num-1)*4;
        int arr[][]=new int[num1][num1];
        fun(arr,num1,0,2,1);
        show(arr);
    }
    public static void fun(int arr[][],int num,int x,int y,int k){
            if(num-x==1)
            return;
            for(int i=x;i<num-x;i++){
                for(int j=y;j<num-y;j++){
                arr[i][j]=k;
                arr[j][i]=k;
            }
        }
        k=k==1?0:1;
        fun(arr,num,x+1,y+1,k);
    }
    public static void show(int arr[][]){
    //打印
    for(int i=0;i<arr.length;i++){
        for(int j=0;j<arr[i].length;j++){
        if(arr[i][j]==1){
            System.out.print(“$”);
        }else{
            System.out.print(“.”);
        }
    }
    System.out.println();
    }
}
}

2.打印一个 N*N 的方阵
这里写图片描述

public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int num = Integer.parseInt(scanner.nextLine());
        int arr[][] = new int[num][num];
        for (int i = 0; i < num; i++) {
            for (int j = 0; j < num; j++) {
                arr[i][j] = 'T';
            }
        }
        for (int i = 1; i < num - 1; i++) {
            for (int j = 1; j < num - 1; j++) {
                arr[i][j] = 'J';
            }
        }
        fun(2, 2, arr, 1, num);
        show(arr);
    }

    public static void fun(int x, int y, int[][] arr, int count, int num) {
        if (num - x == 1)
            return;
        for (int i = x; i < num - x; i++) {
            for (int j = y; j < num - y; j++) {
                arr[i][j] = count;
            }
        }
        fun(x + 1, y + 1, arr, count + 1, num);
    }

    private static void show(int[][] arr) {
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr[i].length; j++) {
                if (i == 0 || j == 0 || i == arr.length - 1
                        || j == arr[i].length - 1 || i == 1 || j == 1
                        || i == arr.length - 2 || j == arr[i].length - 2) {
                    System.out.print((char) arr[i][j]);
                } else {
                    System.out.print(arr[i][j]);
                }
            }
            System.out.println();
        }
    }

3.矩阵中填数. 当给出 N*N 的矩阵(倒填)
这里写图片描述

public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int num = Integer.parseInt(scanner.nextLine());
        int arr[][] = new int[num][num];
        int k = num * num;
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr[i].length; j++) {
                arr[i][j] = k;
                k--;
            }
        }
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr[i].length; j++) {
                System.out.print(arr[i][j] + "\t");
            }
            System.out.println();
        }
    }

4.矩阵中填数. 当给出 N*N 的矩阵(回转填数)
这里写图片描述

/**
     * 矩阵中填数. 当给出 N*N 的矩阵(回转填数)
     */
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int num = Integer.parseInt(scanner.nextLine());
        int arr[][] = new int[num][num];
        int k = num * num;
        for (int i = 0, j = 0, d = 0, x = 1; x <= k; x++) {
            arr[i][j] = x;
            if (d == 0)// 方向向下
            {
                if (i + 1 < arr.length && arr[i + 1][j] == 0) {
                    i++;
                } else {
                    d = 1;
                }
            }
            if (d == 1)// 方向向右
            {
                if (j + 1 < arr[i].length && arr[i][j + 1] == 0) {
                    j++;
                } else {
                    d = 2;
                }
            }
            if (d == 2)// 方向向上
            {
                if (i - 1 >= 0 && arr[i - 1][j] == 0) {
                    i--;
                } else {
                    d = 3;
                }
            }
            if (d == 3)// 方向向左
            {
                if (j - 1 >= 0 && arr[i][j - 1] == 0) {
                    j--;
                } else {
                    d = 0;
                    i++;
                }
            }
        }
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr[i].length; j++) {
                System.out.print(arr[i][j] + "\t");
            }
            System.out.println();
        }
    }

5.杨辉三角

 /**
     * 杨辉三角
     */
    public static void main(String[] args) {
        int num = 10;// 打印10行的杨辉三角,可以任意指定
        int arr[][] = new int[num][];
        // 给数组列数开辟空间一行比一行多一列
        for (int i = 0; i < arr.length; i++) {
            arr[i] = new int[i + 1];
        }
        // 给数字每一行的第一个和最后一个赋值为1
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr[i].length; j++) {
                arr[i][0] = 1;
                arr[i][arr[i].length - 1] = 1;
            }
        }
        // 根据杨辉三角规律给其它地方赋值
        for (int i = 2; i < arr.length; i++) {
            for (int j = 1; j < arr[i].length - 1; j++) {
                arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];
            }
        }
        // 打印杨辉三角
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr[i].length; j++) {
                System.out.print(arr[i][j] + " ");
            }
            System.out.println();
        }
    }

猜你喜欢

转载自u012081441.iteye.com/blog/2382968
今日推荐