一,试题 B:类斐波那契循环数
1.题目描述:
2.实例:
略
3.思路:
优化了昨天的算法,省略了import部分
4:代码:
package cn.蓝桥杯.十五届;
public class B {
// 检查一个数是否为类斐波那契循环数
public static boolean isFibonacciLikeCyclicNumber(int num) {
String numStr = String.valueOf(num);
int n = numStr.length();
// 创建一个数组来存储类斐波那契数列
int[] sequence = new int[n + 1];
//n+1是为了储存生成的下一个斐波那契数
// 初始化数列的前 n 个数
for (int i = 0; i < n; i++) {
sequence[i] = numStr.charAt(i) - '0';
}
int index = n;
//指数
while (true) {
int sum = 0;
// 计算下一个数,即前 n 个数的和
for (int i = index - n; i < index; i++) {
sum += sequence[i];
}
// 如果和超过了 10^7,停止计算
if (sum > 10000000) {
break;
}
sequence[index] = sum;
// 如果当前计算出的数等于原数,则该数是类斐波那契循环数
if (sum == num) {
return true;
}
index++;
// 扩展数组以容纳更多的数
if (index >= sequence.length) {
int[] newSequence = new int[sequence.length * 2];
System.arraycopy(sequence, 0, newSequence, 0, sequence.length);
sequence = newSequence;
}
}
return false;
}
public static void main(String[] args) {
int maxCyclicNumber = 0;
// 从 10^7 开始递减检查每个数
for (int i = 10000000; i >= 0; i--) {
if (isFibonacciLikeCyclicNumber(i)) {
maxCyclicNumber = i;
break;
}
}
System.out.println("在 0 至 10^7 中,最大的类斐波那契循环数是: " + maxCyclicNumber);
}
}