我一直在练习模式,直到达到这种模式为止。它说以最大为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);
}}
我知道这是错误的,但我希望按照上述示例的逐步方法以常规方式解决。
答案 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
是奇数,并且索引从1
到N
,我们得到:
(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();
}