不会做,谁能帮个忙嘛

题目描述
斐波那契数列以如下递推的形式定义:F(0)=1,F(1)=1,F(n)=F(n−1)+F(n−2)(n≥2,n∈N∗)。

如果一个数出现在斐波那契数列之中,那么我们就称这个数为斐波那契数。

现在,给定一个整数 n,请你构造一个长度为 n 的字符串 s1s2…sn。

对于字符串中的第 i 个字符 si:

如果 i 是斐波那契数,则 si 为大写字母 O。 如果 i 不是斐波那契数,则 si 为小写字母 o。 输出构造好的字符串。

注意,字符下标从 1 到 n。

img


#include <stdio.h>
#include <malloc.h>
int main(){
    int n,i,dp[2]={1,1};
    char *s;
    scanf("%d",&n);
    s=(char *)malloc(sizeof(char)*(n+1));
    for(i=0;i<n;i++){
        s[i]='o';
    }
    s[n]='\0';
    for(i=1;dp[i]<=n;i=!i){
        s[dp[i]-1]='O';//dp[i]为斐波那契数 
        dp[i]=dp[0]+dp[1];
    }
    printf("%s",s);
    return 0;
}