标题:BigString问题
问题描述:
思路:结合下图,可以知道,可以转化成求最大的斐波拉契数列的最大值问题;
下面是代码:
#include <bits/stdc++.h>
#define LEN 88 //这里定义成88,是因为经过测算,数列最多为86项;
下面在for循环中由第87项可以求出第86项,值得注意的是下面的小于88,也可以转换成<=87;
char base[]="T.T^__^";
int main()
{
long long int fib[LEN];
fib[0]=3;
fib[1]=4;
for(int i=2; i< LEN; i++)
fib[i]=fib[i-1]+fib[i-2];
long long int n;
printf("输入一个数:");
while(true)
{
scanf("%d",&n);
while(n>7)
{
int i=0;
while(i<LEN&&fib[i]<n) //这里是寻找比n小的最大的斐波拉契值;
i++;
n-=fib[i-1]; //这里要减去1
}
printf("%c\n",base[n-1]);
}
return 0;
}
程序运行结果: