一个算法问题(输入一个数字n,输出二位数组)

1、给定一个数字N,输入如下的二位数组,请问解决思路,是什么算法?

如下是需要输出的二位输出样例:
n=2
11
11
n=3
111
121
111
n=4
1111
1221
1221
1111

n=5
11111
12221
12321
12221
11111

n=6
111111
122221
123321
123321
122221
111111

n=......

求编程思路?

算法包括除以2求余,和除以2的商.里面的数值用到余数,商,和给定值N。求余用%,求商用/.只是思路的话,
x行y列,x,y比较,取小的一位.(x,y都小于n/2),
a=x-n/2行b=y-n/2列,取小的一位.(x,y都大于n/2)。
即把这个看成坐标。

如果只要求这样的输出效果的话, 可以用二维矩阵来处理, java 代码如下 :
public class Demo_1 {
public static void main(String[] args){
int n = 7;
int temp = n;
int a[][]=new int[n][n];
for(int i=0;i<=(n+1)/2;i++){
for(int j=i;j<temp;j++){
for(int k=i;k<temp;k++){
a[j][k]+=1;
}
}
temp-=1;
}
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
System.out.print(a[i][j]);
}
System.out.println();
}
}
}

这段代码算是完整了,首先分两种情况,是奇数还是偶数,偶数很简单,加入你输入了一个8,先把1234放入数组,在把4321放入数组,
如果是奇数,假如是7,就先把1234放入数组,然后在放入321,思路就这样,至于判断条件什么的就不用说了吧,希望对你有所帮助
package csdn;

import java.util.Scanner;

public class Math {
public static void main (String[] args){
Scanner scanner=new Scanner(System.in);
System.out.println("请输入一个大于0的整数");
while(true){

        int num=scanner.nextInt();

        if (num<=0) {
            System.out.println("请重新输入一个大于0的整数");
            continue;
        }
        int [] num1=getInt(num);
        for(int i:num1){
            System.out.print(i+" ");
        }
        break;
    }   
}

public static int[] getInt(int num){

    int[] arr= new int[num];
    if (arr.length%2==1) {

        for(int i=0;i<arr.length;i++){
            if (i<=num/2) {
                arr[i]=i+1;
            }else{
                arr[i]=arr.length-i;
            }
        }
        return arr;

    }else {
        for(int i=0;i<arr.length;i++){
            if (i<arr.length/2) {
                arr[i]=i+1;
            }else {
                arr[i]=arr.length-i;
            }
        }
    }
    return arr;
}

}


可以看做最外层有一个边框, 矩阵上的数表明到边框的最小距离

import java.util.Scanner;

/**

  • Created by yueguangxuanyuan on 2015/4/20.
    */
    public class Hello {
    public static void main(String[] args) {
    Scanner in = new Scanner(System.in);

    int num = in.nextInt();
    
    int[][] resultArray = new int[num + 1][num + 1];
    
    int mid = (num + 1) / 2;
    for (int i = 1; i <= mid; i++) {
        for (int j = 1; j <= mid; j++) {
    

    //确定最上角的最小距离 然后水平翻转 外加垂直翻转
    resultArray[i][j] = resultArray[i][num+1 - j] = resultArray[num+1 - i][j] = resultArray[num+1 - i][num+1 - j] =(i > j ? j : i);
    }
    }
    for(int i = 1; i <= num ;i++){
    for(int j = 1; j <=num ; j++){
    System.out.print(resultArray[i][j]);
    }
    System.out.print('\n');
    }
    }
    }