题目描述
斐波那契数列以如下递推的形式定义: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。
题目描述
斐波那契数列以如下递推的形式定义: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。
#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;
}