蓝桥杯-每日打卡(类斐波那契循环数)
- 游戏开发
- 2025-09-14 14:12:01

题目: 解题思路:
假设输入数值为number 分析题目,如果想要解决这个问题,我们需要实现两个方法,第一个检查number是否是类斐波那契,第二个是模拟1e7 - 0的过程,因为是求最大的,那么我们从1e7开始计算会节省很多时间,提高效率。 一:实现类斐波那契数列检查 比如实现197,那么我们需要将197拆分,因为只有三位,那么参与运算的就是1,9,7这三位数字构成了后续的数列,1+9+7 = 17 , 9+7+17 = 33… 那么我们只需要过构造一个窗口,每次是传入数值的位数 我们可以创建一个新的数组,这个数组初始缓存1,9,7。然后窗口大小是传输 数字的位数,此时 a4 = a1+a2+a3 ,然后窗口移动,直到计算出 an == number 返回 true,如果an > number 那么就应该结束
代码: public class T1 { public static void main(String[] args) { int maxFibNum = 0; for (int i = (int) Math.pow(10, 7); i >= 0; i--) { if (check(i)) { maxFibNum = i; break; } } System.out.println("最大的类斐波那契循环数:" + maxFibNum); } public static boolean check(int num) { if (num == 0) return true; int[] arr = new int[10]; int len = 0; int temp = num; while (temp > 0) { arr[len++] = temp % 10; temp /= 10; } int[] digits = new int[len]; for (int i = 0; i < len; i++) { digits[i] = arr[len - 1 - i]; } // 构造的新的队列 // 为什么构造这个100,这个需要你尝试从小到大,如果100 和 500 结果一样,那么就证明这个数值设置的合理 int[] newArray = new int[100]; System.arraycopy(digits, 0, newArray, 0, len); int index = len; while (true) { int sum = 0; // 从 0 - 数字位数 , 计算下一位 for (int i = index - len; i < index; i++) { sum += newArray[i]; } if (sum > num) break; if (sum == num) return true; // 窗口后移 newArray[index++] = sum; } return false; } } // 7913837蓝桥杯-每日打卡(类斐波那契循环数)由讯客互联游戏开发栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“蓝桥杯-每日打卡(类斐波那契循环数)”
上一篇
虚拟机ip配置
下一篇
17028djwcb