题目翻译

我们定义对于所有 $i$ ($3 \leq i \leq n$), $p_{i-2}+p_{i-1} \ne p_i$ 这样的数列称之为 反斐波那契数列 ,给定一个 $n$ ,请输出 $n$ 个长度为 $n$ 的不同的反斐波那契数列。

题目思路

只要 $p_{i-2}$ 和 $p_{i-1}$ 中任意一个数大于 $p_i$ ,那么肯定为反斐波那契数列。

所以构造一个降序的数列,然后每次把最后一个数往前挪,肯定能构成一个反斐波那契数列。

题目代码

void solve()
{
    int n;
    cin>>n;
    int f=n;//记录最小位置
    int a[n+1];
    for(int i=1;i<=n;i++)a[i]=n-i+1;//创造降序数组
    for(int nn=0;nn<n;nn++)//n个数列
    {
        for(int i=1;i<=n;i++)cout<<a[i]<<" ";
        cout<<endl;
        swap(a[f],a[f-1]);//每次把最小往前
        f--;//更新最小位置
    }
}

多组数据,代码未全。请勿copy,当心踩坑。

最后修改:2023 年 04 月 22 日
v我50吃疯狂星期四