蓝桥杯2021模拟赛第三次(部分)

这篇博客探讨了几个编程题目,涉及斐波那契数列的奇偶性判断、Pierce序列的长度计算、Excel列名的生成以及矩阵子区域的选择,这些都是计算机科学中的基本概念和算法应用。

试题C——答案:12

问题描述
  对于整数 v 和 p,定义 Pierce 序列为:
  a[1] = v
  a[i] = p % a[i-1]
  例如,当 v = 8, p = 21 时,对应的 Pierce 序列为
  a[1] = 8
  a[2] = 5
  a[3] = 1
  再往后计算,值变为 0,不在我们考虑的范围内。因此当 v = 8, p = 21 时, Pierce 序列的长度为 3。
  当 p 一定时,对于不同的 v 值,Pierce 序列的长度可能不同。当 p = 8 时,若 1<=v<p,最长的 Pierce 序列出现在 v=13时,为(13, 8, 5, 1),长度为 4。
  当 p=2021 时,最长的 Pierce 序列出现在 v=1160 时,请问这个序列有多长?

答案提交
  这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int v=1160;
		int p=2021;
		int a=v;
		int ans=1;
		while(a!=0){
			a=p % a;
			ans++;
		}
		System.out.print(ans-1); //多加了0的那种情况,记得减掉
	}

}

试题E——答案:BYS

问题描述
  在 Excel 中,第 1 列到第 26 列的列名依次为 A 到 Z,从第 27 列开始,列名有两个字母组成,第 27 列到第 702 列的列名依次为 AA 到 ZZ。
  之后的列再用 3 个字母、4 个字母表示。
  请问,第 2021 列的列名是什么?

答案提交
  这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个有大写字母组成的字符串,在提交答案时只填写这个字符串,填写多余的内容将无法得分。

直接计算:
Z:0+26=26
ZZ:26+26 * 26=702
AZZ:702+26 * 26=1378
BZZ:1378+26 * 26=2054
BYZ:2054-26=2028
往前推即可

试题F

问题描述
  在书写一个较大的整数时,为了方便看清数位,通常会在数位之间加上逗号来分割数位,具体的,从右向左,每三位分成一段,相邻的段之间加一个逗号。
  例如,1234567 写成 1,234,567。
  例如,17179869184 写成 17,179,869,184。
  给定一个整数,请将这个整数增加分割符后输出。

输入格式
  输入一行包含一个整数 v。
输出格式
  输出增加分割符后的整数。
样例输入
1234567
样例输出
1,234,567
样例输入
17179869184
样例输出
17,179,869,184
数据规模和约定
  对于 50% 的评测用例,0 <= v < 10^9 (10的9次方)。
  对于所有评测用例,0 <= v < 10^18 (10的18次方)。

import java.util.Scanner;

public class F3 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner s=new Scanner(System.in);
		long n=s.nextLong();
		String ans = "";
		while(n!=0){
			ans=n%1000+ans;
			n=n/1000;
			if(n>0) ans=","+ans;
		}
		System.out.print(ans);
	}

}

试题G

问题描述
  斐波那契数列是这样一个数列:它的第一项和第二项都是1,从第三项开始每一项都是前两项的和。
  根据以上定义,我们容易计算出斐波那契数列的前几项依次是:1, 1, 2, 3, 5, 8, 13, 21, 34, 55 ……
  现在请你计算斐波那契数列第N项是奇数还是偶数?

输入格式
  输入的包含一个整数N。
输出格式
  如果是奇数输出1,是偶数输出0。
样例输入
10
样例输出
1
数据规模和约定
  对于所有评测用例,1 <= N <= 1000000000。

提示
  找规律。

import java.util.Scanner;
 
public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		if (n % 3 == 0) {
			System.out.println(0);
		} else {
			System.out.println(1);
		}
	}
}

试题H

问题描述
  给定一个矩阵 M,由 n 行 m 列组成,第 i 行第 j 列值为 M[i][j]。
  定义矩阵 M 的重量为矩阵中所有元素的和,几位weight(M)
  请找到矩阵左上角的一个子矩阵S(矩阵的前 r 行中的前 c 列组成),使得这个子矩阵的重量的两倍最接近矩阵 M 重量。即 |2 weight(S)-weight(M)| 最小。
  如果有多个子矩阵满足条件,请找出面积 r * c 最小的一个。
  如果仍然有多个子矩阵满足条件,请找出其中 r 最小的一个。

输入格式
  输入第一行包含两个整数 n, m,表示矩阵的大小。
  接下来 n 行,每行 m 个整数,表示给定的矩阵M。
输出格式
  输出一行,包含两个整数 r, c,表示子矩阵为矩阵 M 的前 r 行中的前 c 列。
样例输
3 4
3 0 1 1
1 0 1 1
1 1 -2 4
样例输出
2 3
数据规模和约定
  对于 30% 的评测用例,1 <= n, m <= 20, -10 <= M[i][j] <= 10。
  对于 50% 的评测用例,1 <= n, m <= 100, -100 <= M[i][j] <= 100。
  对于所有评测用例,1 <= n, m <= 1000, -1000 <= M[i][j] <= 1000。

import java.util.Scanner;

public class H3 {
	static int mw = 0, n, m;
	static int[][]M;
	static int r = 1, c = 1, d = Integer.MAX_VALUE;
 
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		n = sc.nextInt();
		m = sc.nextInt();
		M = new int[n+1][m+1];
		for (int i = 1; i <= n; ++i) {
			for (int j = 1; j <= m; ++j) {
				M[i][j] = sc.nextInt();
				mw += M[i][j];
			}
		}
		int[][] w = new int[n + 1][m + 1];
		for (int i = 1; i <= n; ++i) {
			for (int j = 1; j <= m; ++j) {
				w[i][j] = w[i - 1][j] + w[i][j - 1] - w[i - 1][j - 1] + M[i][j];
				check(w[i][j], i, j);
			}
		}
		System.out.println(r + " " + c);
	}
 
	public static void check(int x, int i, int j) {
		if (Math.abs(2 * x - mw) < d || Math.abs(2 * x - mw) == d && i * j < r * c) {
			r = i;
			c = j;
			d = Math.abs(2 * x - mw);
		}
	}
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值