「インスパカップ」山東省で開催された第7回ACMカレッジスチューデントプログラミングコンペティションフィボナッチ(タイトルリンク付き)

トピック

トピックリンク:Fibonacci
ここに写真の説明を挿入

回答

質問の意味によると、番号の構成に2つの連続するフィボナッチ番号がある場合(ここでの連続性はフィボナッチシーケンス内の番号の位置を指します)、-1を出力します。
ただし、比較的簡単に見つけることができます。特定の番号の構造に2つの連続するフィボナッチ番号がある場合、この2つの番号を置き換えるためにこの後の1つのフィボナッチ番号を使用する必要があるため、考慮する必要はありません。 -1つの状況。

構築するときは、毎回取ることができる数字の最大のものを取り、連続的な状況があるかどうかを判断し、存在する場合は、次の位置に変更し、連続することがなくなるまで、その位置のフィボナッチ数を数まで差し引きます0に減らします。

Fibonacciアレイは少し大きく開きます。悲惨すぎたQAQ

ACコード

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<cstdlib>
#include<string>
#include<queue>
#include<map>
#include<stack>
#include<list>
#include<set>
#include<deque>
#include<vector>
#include<ctime>

using namespace std;
//#pragma GCC optimize(2)
#define IO ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)
#define ull unsigned long long
#define ll long long
#define rep(i, x, y) for(int i=x;i<=y;i++)
#define mms(x, n) memset(x, n, sizeof(x))
#define mmc(A, tree) memcpy(A, tree, sizeof(tree))
#define eps (1e-8)
#define PI (acos(-1.0))
#define INF (0x3f3f3f3f)
#define mod (ull)(1e9+7)
typedef pair<int, int> P;
int f[50];

void fib() {
    f[1] = 1;
    f[2] = 2;
    for (int i = 3; i < 50; i++) f[i] = f[i - 1] + f[i - 2];
}


int main() {
#ifndef ONLINE_JUDGE
    freopen("input.txt", "r", stdin);
#endif
    fib();
    int T;
    scanf("%d", &T);
    while (T--) {
        int n;
        scanf("%d", &n);
        int t = n;
        vector<int> ans;
        set<int> st;
        while (t != 0) {
            int pos = upper_bound(f + 1, f + 50, t) - f - 1;
            if (f[pos] > t) pos--;
            while (st.find(pos + 1) != st.end() || st.find(pos - 1) != st.end()) {
                pos--;
            }
            st.insert(pos);
            ans.push_back(f[pos]);
            t -= f[pos];
        }
        printf("%d=", n);
        int size = ans.size();
        for (int i = size - 1; i >= 0; i--) {
            if (i == size - 1) printf("%d", ans[i]);
            else printf("+%d", ans[i]);
        }
        printf("\n");
    }
    return 0;
}

おすすめ

転載: blog.csdn.net/qq_45934120/article/details/108451260
おすすめ