思路一:
找规律。第一行第一列为1,第二行第二列为5,第三行第三列为13……,可以看出:
从第一行第一列开始,每增加一行一列数字增大n*4。所以算出1+5+13+25……的和即可。
源代码:
public class C1{
public static void main(String[]args){
int num = 1;//第一行第一列为1
for(int i = 1;i < 20;i++){
num += i*4;//从第一行第一列开始,每增加一行一列数字增大n*4,并求和
}
System.out.println(num);
}
}
思路二:
定义一个足够大的数组,蛇形存入数字。注意一定要一个足够大的数组!如下图:
如要存入第三行第三列的数时,只定义一个三行三列的数组。在蛇形填数时绿色部分是填不到的。
在定义完数组后按规律存入数字并输出第二十行二十列的数字即可。
源代码:
public class C{
public static void main(String[] args){
int num[][]=new int[50][50]; //定义一个50行50列的二维数组
num[1][0]=3; //另第1行第0列为3
int row=1,column=0; //另行为1,列为0
//设置一个标记
//如果flag为1,数字往左下加1
//如果flag为0,数字往右上加1
int flag = 0;
while(row!=50&column!=50){
//如果行=0
if(row==0){
flag = 1; //切换标记
num[row][column+1]=num[row][column]+1;//同行下一列+1
column++;//同时保证row和column与目前存储到的位置相同
}
//如果列=0,同上
if(column==0){
flag = 0;
num[row+1][column]=num[row][column]+1;
row++;
}
//当标记为1时,左下的数字=原数字+1
if(flag==1){
num[row+1][column-1]=num[row][column]+1;
row +=1;
column -=1;//同时保证row和column与目前存储到的位置相同
}else{当标记为0时,右上的数字=原数字+1
num[row-1][column+1]=num[row][column]+1;
row -=1;
column +=1;//同时保证row和column与目前存储到的位置相同
}
}
System.out.println(num[19][19]);
}
}
答案:761