题解分享
题解分享简介
类斐波那契循环数(结果填空) - 题解
把题目公式翻译为代码, 然后模拟即可
```cpp
#include <iostream>
#include <string>
#include <vector>
#include <numeric>
#include <algorithm>
using namespace std;
using ll = long long;
int main() {
int n = 1e7;
for (int i = n; i >= 197; --i) {
vector<int> mae;
int x = i;
while (x) {
mae.push_back(x % 10);
x /= 10;
}
mae = {mae.rbegin(), mae.rend()};
int n = mae.size();
ll s = 0;
for (int k = n; s < i; ++k) {
s = 0;
for (int c = k - n; c < k; ++c) {
s += mae[c];
}
mae.push_back(s);
}
if (s == i) {
cout << i << '\n';
return 0;
}
}
return 0;
}
```
查看全文
0
0
1
4
类斐波那契循环数(结果填空) - 题解
模拟纯暴力
```import
import java.util.List;
public class 类斐波那契循环数 {
static int maxx = Integer.MIN_VALUE;
static int n = 197;
static int [] arr;
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
for (int i = 7913837; i > 0 ; i--) {
System.out.println(i);
if(check_(i)) {
System.out.println(i);
break;
}
}
}
private static boolean check_(int i) {
String string = String.valueOf(i);
arr = new int[(int)1e6];
char[] charArray = string.toCharArray();
for (int j = 0; j < charArray.length; j++) {
arr[j+1]=charArray[j]-'0';
// System.out.println(arr[j+1]);
}
for (int k = charArray.length+1; arr[k-1]<i; k++) {
arr[k]=summer(k,charArray.length);
// System.out.println(arr[k]);
if(arr[k]==i) {
return true;}
}
// TODO Auto-generated method stub
return false;
}
private static int summer(int k,int n) {
// TODO Auto-generated method stub
int sum = 0;
for (int i = k-n; i <= k-1; i++) {
// System.out.println(arr[i]);
sum+=arr[i];
}
return sum;
}
}
```
查看全文
0
0
0
3
类斐波那契循环数(结果填空) - 题解
def is_fibonacci_loop_number(N):
"""判断一个数N是否是类斐波那契循环数"""
处理特殊情况:0的数列全为0,一定符合条件
if N == 0:
return True
```
# 将数字拆分为各位数字的列表,例如197 -> [1, 9, 7]
digits = list(map(int, str(N)))
# 获取数字的位数n,例如197的n=3
n = len(digits)
# 初始化数列S,前n项为数字的各位
sequence = digits.copy()
# 最多生成100项,避免无限循环(根据问题特性设置的阈值)
for _ in range(100):
# 计算新项:取当前序列的最后n项求和
next_val = sum(sequence[-n:])
# 发现新项等于目标数N,返回True
if next_val == N:
return True
# 若新项超过N,后续项只会更大,直接终止
if next_val > N:
return False
# 将新项添加到序列中
sequence.append(next_val)
# 循环100次仍未找到匹配项,返回False
return False
```
def find_max_fibonacci_loop_number():
"""在0到10^7范围内寻找最大的类斐波那契循环数"""
max_N = 107 # 问题定义的上界
```
# 从最大值开始倒序遍历,确保找到第一个符合条件的数即为最大值
for N in range(max_N, -1, -1):
# 检查当前数是否符合条件
if is_fibonacci_loop_number(N):
return N # 找到后立即返回
# 若未找到(理论上不会执行到这里)
return -1
```
执行搜索并打印结果
print(find_max_fibonacci_loop_number())
查看全文
0
0
0
3



