小言_互联网的博客

【蓝桥杯2020Java】门牌制作、寻找2020、蛇形填数

221人阅读  评论(0)

门牌制作

【问题描述】
小蓝要为一条街的住户制作门牌号。
这条街一共有 2020 位住户,门牌号从 1 到 2020 编号。
小蓝制作门牌的方法是先制作 0 到 9 这几个数字字符,最后根据需要将字
符粘贴到门牌上,例如门牌 1017 需要依次粘贴字符 1、0、1、7,即需要 1 个
字符 0,2 个字符 1,1 个字符 7。
请问要制作所有的 1 到 2020 号门牌,总共需要多少个字符 2?
【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一
个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

public class Main{
   
	static int counts=0;
	public static void main(String[] args) {
   			
		for(int i=1;i<=2020;i++) {
   
			char[]years=(i+"").toCharArray();
			for(char j:years) {
   
				if(j=='2')counts++;
			}
		}
		System.out.println(counts);
	}
}

寻找2020


因为不知道文件中矩阵有多少行列,由下图和代码知道有300行。

按行取就行了。其实与我写的代码大同小异,就不写转换了,或者直接用charAt都行。

public class Main{
   
	static int counts=0;
	/*
	 * 	6 6
		2 2 0 0 0 0
		0 0 0 0 0 0
		0 0 2 2 0 2
		0 0 0 0 0 0
		0 0 0 0 2 2
		0 0 2 0 2 0
	 */
	public static void main(String[] args) {
   
		Scanner sc = new Scanner(System.in);
		int N=sc.nextInt();
		int M=sc.nextInt();
		int[][]nums=new int[N][M];
		for(int i=0;i<N;i++) {
   
			for(int j=0;j<M;j++) {
   
				nums[i][j]=sc.nextInt();
			}
		}
		for(int i=0;i<N-3;i++) {
   
			for(int j=0;j<M-3;j++) {
   
				if(nums[i][j]==2&&nums[i+1][j+1]==0&&nums[i+2][j+2]==2&&nums[i+3][j+3]==0)counts++;
			}
		}
		for(int i=0;i<N;i++) {
   
			for(int j=0;j<M-3;j++) {
   
				if(nums[i][j]==2&&nums[i][j+1]==0&&nums[i][j+2]==2&&nums[i][j+3]==0)counts++;
			}
		}
		for(int i=0;i<N-3;i++) {
   
			for(int j=0;j<M;j++) {
   
				if(nums[i][j]==2&&nums[i+1][j]==0&&  nums[i+2][j]==2  &&  nums[i+3][j]==0)counts++;
			}
		}
		System.out.println(counts);
	}
}

蛇形填数


我的想法就是很简单,模拟蛇的路线,一步步得到数组中的每一个值,最后返回snake[19][19]

public class Main{
   
	static int counts=0;
	public static void main(String[] args) {
   			
		int[][]snake=new int[100][100];
		int i=0,j=0,indexNum=1;
		while(true) {
   
			snake[i][j++]=indexNum++;//向右
			while(j!=0) {
   //向左下角
				snake[i++][j--]=indexNum++;
			}
			snake[i++][j]=indexNum++;//给j=0时候赋值
			snake[i--][j++]=indexNum++;//向下赋值
			while(i!=0) {
   //向右上角
				snake[i--][j++]=indexNum++;
			}
			if(j>50)break;
		}
		System.out.println(snake[19][19]);
	}
}

答案 761

接下来就提供别人的思路.他这是找到了规律,所以直接列了一个函数就直接找到了。

public static void main(String[] args) {
   
		Scanner scanner = new Scanner(System.in);
		int n = scanner.nextInt();
		System.out.println(sum(n));
	}
	
	private static int sum(int n) {
   
		if(n==1) {
   
			return 1;
		}
		return sum(n-1)+4*(n-1);
	}
}

转载:https://blog.csdn.net/VanGotoBilibili/article/details/115558616
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场