第十五届蓝桥杯大赛软件赛省赛Java 大学 B 组(1、2题)
1.报数游戏
问题描述
小蓝和朋友们在玩一个报数游戏。由于今年是 2024 年,他们决定要从小到大轮流报出是 20或 24 倍数的正整数。前 10 个被报出的数是:20,24,40,48,60,72,80,96,100,120。请问第 202420242024个被报出的数是多少?
答案提交
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
看奇数偶数就好了,第202420242024是偶数位,所以是24的101210121012倍、
import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
//在此输入您的代码...
long a = 24*101210121012L;
System.out.print(a);
scan.close();
}
}
2.类斐波那契循环数
问题描述
对于一个有 𝑛n 位的十进制数 𝑁=𝑑1𝑑2𝑑3…𝑑𝑛,可以生成一个类斐波那契数列𝑆,数列 𝑆的前 𝑛 个数为:
{𝑆1=𝑑1,𝑆2=𝑑2,𝑆3=𝑑3,…,𝑆𝑛=𝑑𝑛}
数列 𝑆的第 𝑘(𝑘>𝑛) 个数为:
如果这个数 𝑁 会出现在对应的类斐波那契数列 𝑆 中,那么 𝑁 就是一个类斐波那契循环数。
例如对于 197,对应的数列 𝑆 为:
{1,9,7,17,33,57,107,197,…}
197197 出现在 𝑆 中,所以 197 是一个类斐波那契循环数。
请问在 0 至 107 中,最大的类斐波那契循环数是多少?
答案提交
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
关键规律:当前这个数乘以2减去第一个元素就是类斐波那契数。
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
long answer = 0;
for(int x = 197;x<1e7;x++){
if(dp(x)) answer =x;
}
System.out.print(answer);
}
public static boolean dp(int i){
ArrayList<Integer> list= new ArrayList<>();
String s = i+"";
int res = 0;
for(int j=0;j<s.length();j++){
list.add(s.charAt(j)-'0');
res +=(s.charAt(j)-'0');
}
list.add(res);
while(true){
res = res*2-list.get(0);
list.remove(0);
list.add(res);
if(res==i){
return true;
}else if(res>i){
return false;
}
}
}
}