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