洛谷P11042 [蓝桥杯 2024 省 Java B] 类斐波那契循环数
像是这种填空题的话,就直接暴力还更加省时间,在本地算完后直接提交答案即可
#include<bits/stdc++.h>
using namespace std;
const int N = 10000000;
bool isnumber(int n) {
vector<int> a;
int m = n;
while (n > 0) {
a.push_back(n % 10);
n /= 10;
}
reverse(a.begin(), a.end()); // 将数字反转,使得 a[0] 是最高位
int k = a.size();
while (true) {
int next = 0;
for (int i = a.size() - k; i < a.size(); i++) {
next += a[i];
}
if (next == m) {
return true;
}
if (next > m) {
return false;
}
a.push_back(next);
}
}
int main() {
int MAX = -1;
for (int i = 0; i <= N; i++) {
if (isnumber(i)) {
MAX = i;
}
}
cout << MAX << endl;
return 0;
}
对于不确定长度的数组用vector容器,这样可以确保不越界,还有记得多使用一下reverse反转数组,在进制转换中也通过好用,整体的思路是好的,只不过对于数组越界中还是没能够有明确的判断。