第十一届蓝桥杯Java B组C题蛇形填数

在这里插入图片描述
思路一:
找规律。第一行第一列为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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值