打印数字的同心平方

时间:2019-07-11 07:23:27

标签: java algorithm

我一直在练习模式,直到达到这种模式为止。它说以最大为NxN和最小为1x1

的数字打印同心正方形
   For instance, for input N=3 the desired 
    o/p should be 

   33333
   32223
   32123
   32223
   33333

我尝试过

     for(int i=1;i<=2*N-1;i++)   
         { 
              for(int j=1;j<=2*N-1;j++) 
            {
    if(i==1 || i==N) --for max n min layer
             System.out.print(N);
else if(j!=1 || j!=N) --for col not as max n min and rows between max n min
             System.out.print(N-1);
             else 
                 System.out.print(N);
               }}

我知道这是错误的,但我希望按照上述示例的逐步方法以常规方式解决。

3 个答案:

答案 0 :(得分:0)

对于第i行(i

然后打印2 *(N-i)-1次,您将打印N-i

最后,您将N-i打印到N(同样要排除N-i)

将这些行打印两次将达到目的

示例代码如下。 (这只是为了给您一个想法。未经测试):

disable-output-escaping

答案 1 :(得分:0)

这些是根据最大准则的圆圈。

根据该距离,坐标(x0, y0)(x1, y1)的两个点相距

d = max (abs(x0-x1), abs(y0-y1))

在这里,第一步是计算中心的坐标。假设N是奇数,并且索引从1N,我们得到:

(xc, yc) = ((N+1)/2, (N+1)/2)

然后,对于坐标(i, j)的每个点,只需要打印

1 + max (abs(i-xc), abs(j-yc))

请注意,我将N称为行和列的总数

伪代码:

N = 5
do i = 1 to N
    do j = 1 to N
        print 1 + max(abs(i-(N+1)/2), abs(j-(N+1)/2))
    print "\n"

答案 2 :(得分:0)

试试下面的代码,你可以根据你的要求更改下面的代码

Scanner sc = new Scanner(System.in);
    int n = sc.nextInt();
    int size = 2*n-1;
    int start=0;
    int end=size-1;
    int [][]a = new int[size][size];
while(n!=0) {
    for (int i=start;i<=end;i++) {
        for (int j=start;j<=end;j++) {
            if((i==start)||(j==start)||(i==end)||(j==end))
                a[i][j] = n;
        }
    }
    start++;
    end--;
    n--;
}
    for (int i=0;i<size;i++) {
        for (int j=0;j<size;j++) {
            System.out.print(a[i][j]+" ");
        }
        System.out.println();
    }