習題6-4 使用函數輸出指定範圍内的Fibonacci數
本題要求實作一個計算Fibonacci數的簡單函數,并利用其實作另一個函數,輸出兩正整數m和n(0<m≤n≤10000)之間的所有Fibonacci數。所謂Fibonacci數列就是滿足任一項數字是前兩項的和(最開始兩項均定義為1)的數列。
函數接口定義:
int fib( int n );
void PrintFN( int m, int n );
其中函數fib須傳回第n項Fibonacci數;函數PrintFN要在一行中輸出給定範圍[m, n]内的所有Fibonacci數,相鄰數字間有一個空格,行末不得有多餘空格。如果給定區間内沒有Fibonacci數,則輸出一行“No Fibonacci number”。
裁判測試程式樣例:
#include <stdio.h>
int fib( int n );
void PrintFN( int m, int n );
int main()
{
int m, n, t;
scanf("%d %d %d", &m, &n, &t);
printf("fib(%d) = %d\n", t, fib(t));
PrintFN(m, n);
return 0;
}
/* 你的代碼将被嵌在這裡 */
複制
輸入樣例1:
20 100 7
輸出樣例1:
fib(7) = 13
21 34 55 89
輸入樣例2:
2000 2500 8
輸出樣例2:
fib(8) = 21
No Fibonacci number
代碼:
int fib( int n )
{
int a=1;
int b=1;
if(n==1||n==2) return 1;
else
{
int c;
int temp=2;
while(1)
{
c=a+b;
temp++;
a=b;
b=c;
if(temp>=n) break;
}
return c;
}
}
void PrintFN( int m, int n )
{
int i;
int arr[100];
int tt=0;
for(i=1;;i++)
{
int temp=fib(i);
if(temp>=m&&temp<=n)
{
arr[tt++]=temp;
}
if(temp>n) break;
}
if(tt==0) printf("No Fibonacci number\n");
else
{
for(i=0;i<tt;i++)
{
if(i==tt-1) printf("%d\n",arr[i]);
else printf("%d ",arr[i]);
}
}
}
複制