最大的Fibonacci数
无穷数列1,1,2,3,5,8,13,21,34,55…称为Fibonacci数列,它可以递归地定义为
F(n)=1 ………..(n=1或n=2)
F(n)=F(n-1)+F(n-2)…..(n>2)
现要你来求第n个斐波纳奇数。(第1个、第二个都为1)
输入
第一行是一个整数m(m<5)表示共有m组测试数据
每次测试数据只有一行,且只有一个整形数n(n<20)
输出
对每组输入n,输出第n个Fibonacci数
样例输入
3
1
3
5
样例输出
1
2
5
解题思路:
先排序,比较相邻两元素之间差大小,留下最大值
写了冒泡排序,和桶排序两种
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<math.h>
#define bucket_size 10//给10个桶
void bubblesort(float m[],int n){
int i,j;
float k;
for(i=0;i<n-1;i++){
for(j=0;j<n-1-i;j++){
if(m[j]>m[j+1]) {
k=m[j];
m[j]=m[j+1];
m[j+1]=k;
}
}
}
}
typedef struct node {
float data;
struct node *next;
}KeyNode;
void bucketsort(float m[],int n) {
int i,j;
KeyNode **bucket_table = (KeyNode **)malloc(bucket_size * sizeof(KeyNode*));
//创建桶
for(i = 0;i <bucket_size;i++) {
bucket_table[i] = (KeyNode*)malloc(sizeof(KeyNode));
bucket_table[i]->data = 0;
bucket_table[i]->next = NULL;
}
//插入元素
for(j = 0;j < n;j++) {
KeyNode *node = (KeyNode *)malloc(sizeof(KeyNode));
node->data = m[j];
node->next = NULL;
int index = m[j]/10; //大小为2
KeyNode *p = bucket_table[index];
if(p->data == 0 && p->next==NULL) {
bucket_table[index]->next = node;
(bucket_table[index]->data)++;
}
else {
while(p->next != NULL && p->next->data <= node->data){
p = p->next;
(bucket_table[index]->data)++;
}
node->next = p->next;
p->next = node;
}
}
int num=0;
KeyNode *k=bucket_table[num];
for(i=0;i<n;i++){
if(k->next==NULL){
num++;
i--;
k=bucket_table[num];
}
else{
m[i]=k->next->data;
k=k->next;
}
}
}
int main(){
int n,i;
float m[100],max,k;
clock_t start,finish;
double time;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%f",&m[i]);
printf("冒泡排序:\n");
start=clock();
bubblesort(m,n);
k=0.0;max=0.0;
for(i=0;i<n-1;i++){
k=m[i+1]-m[i];
if(max<k) max=k;
}
printf("%.1f\n",max);
finish=clock();
time=(double)(finish-start)/CLOCKS_PER_SEC;
printf("运行时间为:%f\n",time);
printf("桶排序:\n");
start=clock();
bucketsort(m,n);
k=0.0;max=0.0;
for(i=0;i<n-1;i++){
k=m[i+1]-m[i];
if(max<k) max=k;
}
printf("%.1f\n",max);
finish=clock();
time=(double)(finish-start)/CLOCKS_PER_SEC;
printf("运行时间为:%f\n",time);
return 0;
}