Java 方形换环形图案

Java 方形换环形图案,java,for-loop,Java,For Loop,我面临着一个我的大脑无法处理的问题! 我需要做一个循环来创建这样的图案: 1 1 1 1 1 1 2 2 2 1 1 2 3 2 1 1 2 2 2 1 1 1 1 1 1 所以内部的数字越大,但我不知道怎么才能创建这样的循环 我的AI需要这个,这样我就可以为实体创建感兴趣的区域,所以这不是学校的援助,我到目前为止已经尝试过了 for(int i = 0; i < rows; i++){ for(int j = 0; j < cols; j++){ System.

我面临着一个我的大脑无法处理的问题! 我需要做一个循环来创建这样的图案:

1 1 1 1 1
1 2 2 2 1
1 2 3 2 1
1 2 2 2 1
1 1 1 1 1
所以内部的数字越大,但我不知道怎么才能创建这样的循环 我的AI需要这个,这样我就可以为实体创建感兴趣的区域,所以这不是学校的援助,我到目前为止已经尝试过了

for(int i = 0; i < rows; i++){
   for(int j = 0; j < cols; j++){
      System.out.print("?");
   }
   System.out.println();
}
for(int i=0;i
我真的想不出一个方法来获得代表它在哪个级别的数字!
我一直在试着把这个形象化给自己看,想知道怎样才能最好地创造这个或创造这个。。请帮助我和我的大脑避免头痛!:)我想要的是简单的伪代码或任何容易理解的语言(如java、C++、c)< /p> ,你可以这样做:

for(int i = 0; i < rows; i++){
   for(int j = 0; j < cols; j++){
      // The distance to the left, right, top and bottom border:
      int dl = j;
      int dr = cols - (j+1);
      int dt = i;
      int db = rows - (i+1);

      // The distance to the closest border:
      int d = Math.min(Math.min(dl, dr), Math.min(dt, db));

      // Print according number
      System.out.print(d+1);
   }
   System.out.println();
}
for(int i=0;i
将你的“?”设为1+i,j,(第1行)-i和(第1列)-j的最小值。

你想要的数字是水平或垂直到边缘的最小距离。在伪代码中:

min(i, j , n - 1 - j, n - 1 - i) + 1

因此,从一维到外部的距离是这个(我们先考虑行):

其中
min
是返回两个值中较小值的函数

好的,让我们对列再次执行相同的操作:

distanceC = min(j, cols - 1 - j)
现在,要在每个单元格计算的值为:

min(distanceR, distanceC) + 1
intdim=5;
智力水平=1;
弦线;
对于(int i=0;i级别){
系统输出打印(级别);
}否则{
系统输出打印(l);
}
}否则{
l--;
如果(l>=水平){
系统输出打印(级别);
}否则{
系统输出打印(l);
}
}
}
System.out.println(“”);
如果(i
//创建金字塔
int计数器x=0;
inty=0;
int-intElevationX=0;
国际关系y=0;
内部关联=1;
int-intSide=5;
intMid=(intSide+1)/2;
for(intCounterY=0;intCounterY
在Matlab中,它将第一个元素索引为1,它是:

n = 5;
for i = 1:n
    for j = 1:n
        a = [i, j , n - j + 1, n - i + 1];
        fprintf('%d ',(min(a)));
    end
    fprintf('\n');
end

批,因为我是个疯子

C:\>t
11111
12221
12321
12221
11111

C:\>
你可以从m=5N=5变为m=7N=7E.t.c

@ECHO OFF

setlocal EnableDelayedExpansion


set m=5
set n=5
set /A m_minus1=m-1
set /A n_minus1=n-1

SET /A amid=(%m%+1)/2
SET /A bmid=(%n%+1)/2

for /L %%a in (1,1,%m%) do (
  for /L %%b in (1,1,%n%) do (
    IF %%a==1 SET STRING=!STRING!1
    IF %%a==%m% SET STRING=!STRING!1
     IF %%a GEQ 2 (
         IF %%a LEQ %m_minus1% (
              IF %%a==%amid% (
                 if %%b==%bmid% (
                       SET STRING=!STRING!3
                  ) ELSE (

                   IF %%b==1  SET STRING=!STRING!1
                   IF %%b==%n%  SET STRING=!STRING!1
                   IF %%b GEQ 2 (
                      IF %%b LEQ %n_minus1% (
                         SET STRING=!STRING!2
                      ) %/IF LEQ %
                   ) % /IF GEQ %

                  ) % /ELSE %




              ) ELSE (   % /IF a mids equal/not equal % 


                   IF %%b==1  SET STRING=!STRING!1
                   IF %%b==%n%  SET STRING=!STRING!1
                   IF %%b GEQ 2 (
                      IF %%b LEQ %n_minus1% (
                         SET STRING=!STRING!2
                      ) %/IF LEQ %
                   ) % /IF GEQ %

              ) % /ELSE of IF a mids equal/not equal % 

        ) % LEQ 4 %        
    ) % GEQ 2 %
  ) % b for %

  ECHO/!STRING!
  SET STRING=
) % a for % 

endlocal

i==0是第一行。j==0是第一列如果你只是想了解一下没有正方形的for循环,你会不那么头疼。只需打印i和j,然后打印*,试着弄清楚for循环是如何一起工作的。如果你甚至不知道如何得到代表你所处级别的数字,那么就去做吧这会让你不那么头疼,也会让你更好地适应广场。广场没有那么陡峭。这一点很明显,作为一名程序员,你必须能够将事情分解。我知道循环是如何协同工作的,但我不知道如何计算“水平”(到边界的距离)我从没想过我能计算到最近边界的距离,但无论如何这真的是一个数学难题,考虑到I和j,你可以计算网格中的任何数字,什么
n = 5;
for i = 1:n
    for j = 1:n
        a = [i, j , n - j + 1, n - i + 1];
        fprintf('%d ',(min(a)));
    end
    fprintf('\n');
end
var rows:int=7;
var cols:int=7;

var mid:int=Math.floor(rows / 2); //Gives the 0 based index of middle row
var max:int=mid+1;
for(var i:int=0; i<rows; i++) {
    var s:String="";
    var diff:int=mid - i;
    var maxNum:int=max - Math.abs(mid - i);
    //trace(maxNum);
    for(var j:int=0; j<cols; j++) {
        var dta:int=Math.abs(j - mid)
        if(max - dta > maxNum) {
            s += maxNum;
        } else {
            s += (max - dta);
        }
    }

    trace(s);
}
int  rows=7;
int  cols=7;

int  mid=(int) Math.Floor((double)(rows / 2)); //Gives the 0 based index of middle row
int  max=mid+1;
for(int  i=0; i<rows; i++) {
    int  diff=mid - i;
    int  maxNum=max - Math.Abs(mid - i);
    //trace(maxNum);
    for(int  j=0; j<cols; j++) {
        int dta=Math.Abs(j - mid);
        if(max - dta > maxNum) {
            System.out.write(maxNum);
        } else {
            System.out.write(max - dta);
        }
    }

    System.out.writeLine();
}
1111111   
1222221   
1233321   
1234321   
1233321   
1222221   
1111111
C:\>t
11111
12221
12321
12221
11111

C:\>
@ECHO OFF

setlocal EnableDelayedExpansion


set m=5
set n=5
set /A m_minus1=m-1
set /A n_minus1=n-1

SET /A amid=(%m%+1)/2
SET /A bmid=(%n%+1)/2

for /L %%a in (1,1,%m%) do (
  for /L %%b in (1,1,%n%) do (
    IF %%a==1 SET STRING=!STRING!1
    IF %%a==%m% SET STRING=!STRING!1
     IF %%a GEQ 2 (
         IF %%a LEQ %m_minus1% (
              IF %%a==%amid% (
                 if %%b==%bmid% (
                       SET STRING=!STRING!3
                  ) ELSE (

                   IF %%b==1  SET STRING=!STRING!1
                   IF %%b==%n%  SET STRING=!STRING!1
                   IF %%b GEQ 2 (
                      IF %%b LEQ %n_minus1% (
                         SET STRING=!STRING!2
                      ) %/IF LEQ %
                   ) % /IF GEQ %

                  ) % /ELSE %




              ) ELSE (   % /IF a mids equal/not equal % 


                   IF %%b==1  SET STRING=!STRING!1
                   IF %%b==%n%  SET STRING=!STRING!1
                   IF %%b GEQ 2 (
                      IF %%b LEQ %n_minus1% (
                         SET STRING=!STRING!2
                      ) %/IF LEQ %
                   ) % /IF GEQ %

              ) % /ELSE of IF a mids equal/not equal % 

        ) % LEQ 4 %        
    ) % GEQ 2 %
  ) % b for %

  ECHO/!STRING!
  SET STRING=
) % a for % 

endlocal