导航菜单
首页 >  蓝桥杯java c组真题  > 第十三届蓝桥杯大赛软件赛决赛(Java 大学C组)

第十三届蓝桥杯大赛软件赛决赛(Java 大学C组)

蓝桥杯 2022年国赛真题 Java 大学C组试题 A: 斐波那契与 7试题 B: 小蓝做实验试题 C: 取模试题 D: 内存空间试题 E: 斐波那契数组试题 F: 最大公约数试题 G: 交通信号试题 H: 点亮试题  I: 打折试题 J: 宝石收集

试题 A: 斐波那契与 7

本题总分:555 分

【问题描述】

  斐波那契数列的递推公式为:::F n =Fn − 1+Fn − 2F_n = F_{n−1} + F_{n−2}Fn​=Fn−1​+Fn−2​,其中F 1 =F 2 =1F_1 = F_2 = 1F1​=F2​=1。

  请问,斐波那契数列的第111 至202202011200202202011200202202011200 项(含)中,有多少项的个位是777。

【答案提交】

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

26960268160

找循环节

  找到斐波那契数列在个位上的循环节,然后将答案拆分成三部分就完事了。

import java.util.HashMap;import java.util.Map;public class Test {public static void main(String[] args) { new Test().run(); }long N = 202202011200L;void run() {Map map = new HashMap();int[] cnt = new int[100];map.put(01, 1);int i, j, F1 = 0, F2 = 1, F3 = 0;for (i = 2; ; ++i) {F3 = (F1 + F2) % 10;cnt[i] = cnt[i - 1];if (F3 == 7) ++cnt[i];if (map.containsKey(F2 * 10 + F3)) break;map.put(F2 * 10 + F3, i);F1 = F2;F2 = F3;}j = map.get(F2 * 10 + F3);System.out.print(cnt[j - 1] +((N - j + 1) / (i - j)) * (cnt[i] - cnt[j]) +cnt[(int)(N % (i - j)) - j + 1]);}}试题 B: 小蓝做实验

本题总分:555 分

【问题描述】

  小蓝很喜欢科研,他最近做了一个实验得到了一批实验数据,一共是两百万个正整数。如果按照预期,所有的实验数据xxx 都应该满足10 7 ≤x≤10 8 10^7 ≤ x ≤ 10^8107≤x≤108。但是做实验都会有一些误差,会导致出现一些预期外的数据,这种误差数据yyy 的范围是10 3 ≤y≤10 12 10^3 ≤ y ≤ 10^{12}103≤y≤1012 。由于小蓝做实验很可靠,所以他所有的实验数据中99.99%99.99\%99.99% 以上都是符合预期的。小蓝的所有实验数据都在 p r i m e s . t x t \mathrm{primes.txt}primes.txt 中,现 在他想统计这两百万个正整数中有多少个是质数,你能告诉他吗?

【答案提交】

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

342693

欧拉筛

  首先排除 M i l l e r \mathrm{Miller}Miller- R o b i n \mathrm{Robin}Robin,一般TTT 次询问的题目,TTT 越大,对单次询问响应的复杂度要求越高,于是考虑欧拉筛线性筛出不大于1e81e81e8 的质数,O(1)O(1)O(1) 响应99.99%99.99\%99.99% 的询问,而剩下询问中,yyy 不会大于1e161e161e16,利用因数的对称性,可以在O(y )O(\sqrt y)O(y​) 的复杂下响应。

import java.io.BufferedReader;import java.io.InputStreamReader;import java.io.FileInputStream;public class Test {public static void main(String[] args) { new Test().run(); }int i, N = (int)1e8, M = 0, cnt = 0;void run() {boolean[] composite = new boolean[N + 1];int[] prime = new int[(int)(1.1 * N / Math.log(N))];for (int n = 2; n 1e8) {for (i = 0; prime[i] 1e6) ++ cnt;} else if (!composite[(int)n]) ++cnt;}} catch (Exception e) {e.printStackTrace();}System.out.print(cnt);}}试题 C: 取模

时间限制:3.0s3.0\mathrm s3.0s 内存限制:512.0M B 512.0\mathrm{MB}512.0MB 本题总分:101010 分

【问题描述】

  给定n,mn,mn,m,问是否存在两个不同的数x,yx,yx,y 使得1≤x> (i * 10)) + unit[i] + 'B');count &= (1 1e6F31​>1e6,而1≤a i ≤10 6 1≤a_i ≤10^61≤ai​≤106,于是无论a 0 ,a 1 a_0,a_1a0​,a1​ 取哪个正整数,从AAA 的第303030 项开始,所有的元素都需要修改,

  同时,令GGG 为G 1 =G 2 =gG_1 =G_2 =gG1​=G2​=g 的 “广义斐波那契数列”(这个名词其实已经被定义了),观察FFF 与GGG 各项:::

  G 1 =gF 1 G_1 = gF_1G1​=gF1​   G 2 =gF 2 G_2 = gF_2G2​=gF2​   G 3 =gF 1 +gF 2 =g(F 1 +F 2 )=gF 3 G_3 = gF_1 + gF_2 = g(F_1 + F_2) = gF_3G3​=gF1​+gF2​=g(F1​+F2​)=gF3​      ⋮\quad\ \ \ \vdots   ⋮   G n =g(Fn − 1+Fn − 2)=gF n G_n = g(F_{n-1} + F_{n-2}) = gF_nGn​=g(Fn−1​+Fn−2​)=gFn​

  于是我们只需统计AAA 中,与FFF 比值出现频率最高的项集,然后将其的补集替换为对应的 “广义斐波那契数列” 就行了。

import java.io.BufferedReader;import java.io.InputStreamReader;import java.io.StreamTokenizer;import java.io.IOException;import java.util.TreeMap;import java.util.Map;public class Main {public static void main(String[] args) { new Main().run(); }double[] fib = { 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946, 17711, 28657, 46368, 75025, 121393, 196418, 317811, 514229, 832040 };void run() {Map map = new TreeMap();int n = nextInt(), m = 0, a, ans = n;if (n > 30) n = 30;for (int i = 0; i 0) System.out.print(n - m);else {m = n + 1;for (int i = 1, j = 1; j

相关推荐: