鱼C论坛

 找回密码
 立即注册
查看: 2097|回复: 5

[已解决]帮帮我

[复制链接]
发表于 2020-12-31 10:15:00 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
使用函数输出指定范围内的Fibonacci数 (20分)
本题要求实现一个计算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 )//以下是我的代码,但是输出老是有问题,请老师帮我看一下
{
        if(n==1)return 1;
        else if(n==2)return 1;
        else return fib(n-1)+fib(n-2);
}
void PrintFN( int m, int n )
{
        int i,j,cnt=0;
        for(i=m;i<=n;i++)
        {
                for(j=1;;j++){
                        if(fib(j)==i){
                                printf("%d ",&i);
                                break;
                        }
            }
        }
}
最佳答案
2020-12-31 20:16:28
你的程序,fib() 部份没有问题,PrintFN() 的错误是将输出的 m、n 当成了求 m 项到 n 项的 Fibonacci 值了
  1. #include <stdio.h>

  2. int fib(int n);
  3. void PrintFN(int m, int n);
  4. int i = 0;                         // 定义全局变量

  5. int main()
  6. {
  7.         int m, n, t;

  8.         scanf("%d %d %d", &m, &n, &t);
  9.         printf("fib(%d) = %d\n", t, fib(t));
  10.         PrintFN(m, n);

  11.         return 0;
  12. }

  13. int fib(int n)
  14. {
  15.         if (n == 1 || n == 2)
  16.         {
  17.                 return 1;
  18.         }
  19.         else
  20.         {
  21.                 return fib(n - 1) + fib(n - 2);
  22.         }
  23. }

  24. void PrintFN(int m, int n)
  25. {
  26.         int a, b, f, count = 0;
  27.         for (i = 1;i < 100;i++)
  28.         {
  29.                 f = fib(i);
  30.                 if (m <= f && f <= n)    // 输入的 m、n 是 Fibonacci 值的上、下限,而不是从 m 项到 n 项
  31.                 {
  32.                         printf("%d ", f);
  33.                         count++;
  34.                 }
  35.                 else if (f > n)
  36.                 {
  37.                         break;
  38.                 }
  39.         }
  40.         if (count == 0)
  41.         {
  42.                 printf("No Fibonacci number\n");
  43.         }
  44.         printf("\n");
  45. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-12-31 11:02:24 | 显示全部楼层
参看以下我的python代码  你的fib函数没啥问题,后面的 有些不同

  1. def fib(n):
  2.     if n==1 or n==2:
  3.         return 1
  4.     else:
  5.         return fib(n-1)+fib(n-2)   

  6. def printfn(m,n):
  7.     cnt=0
  8.     x=1
  9.     while(1):
  10.        if fib(x) >=m  and fib(x) <=n:
  11.            cnt+=1
  12.            print(fib(x))
  13.        elif fib(x)>n:
  14.            break   
  15.        x+=1   
  16.     if cnt==0:
  17.         print("NO")

  18. printfn(100,1000)        
  19. printfn(400,500)      
复制代码


D:\wp>py wp\wp1.py
144
233
377
610
987
NO
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-31 11:43:54 | 显示全部楼层
  1. int fib(int n)
  2. {
  3.         if(n < 3) return 1                  ;
  4.         else return fib(n - 1) + fib(n - 2) ;
  5. }

  6. void PrintFN(int m , int n)
  7. {
  8.         int i , j , cnt = 0                       ;
  9.         for(i = 1 ; fib(i) < m ; i ++)            ;
  10.         for(cnt = 0 ; fib(i) <= n ; i ++) {
  11.                 if(cnt) printf(" ")               ;
  12.                 printf("%d" , fib(i))             ;
  13.                 cnt ++                            ;
  14.         }
  15.         if(! cnt) printf("No Fibonacci number\n") ;
  16. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-31 12:05:38 | 显示全部楼层

老师你可以说以下我的printfn函数错在哪了吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-31 12:35:36 | 显示全部楼层
llf123456 发表于 2020-12-31 12:05
老师你可以说以下我的printfn函数错在哪了吗

     看不懂你的代码逻辑
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-31 20:16:28 | 显示全部楼层    本楼为最佳答案   
你的程序,fib() 部份没有问题,PrintFN() 的错误是将输出的 m、n 当成了求 m 项到 n 项的 Fibonacci 值了
  1. #include <stdio.h>

  2. int fib(int n);
  3. void PrintFN(int m, int n);
  4. int i = 0;                         // 定义全局变量

  5. int main()
  6. {
  7.         int m, n, t;

  8.         scanf("%d %d %d", &m, &n, &t);
  9.         printf("fib(%d) = %d\n", t, fib(t));
  10.         PrintFN(m, n);

  11.         return 0;
  12. }

  13. int fib(int n)
  14. {
  15.         if (n == 1 || n == 2)
  16.         {
  17.                 return 1;
  18.         }
  19.         else
  20.         {
  21.                 return fib(n - 1) + fib(n - 2);
  22.         }
  23. }

  24. void PrintFN(int m, int n)
  25. {
  26.         int a, b, f, count = 0;
  27.         for (i = 1;i < 100;i++)
  28.         {
  29.                 f = fib(i);
  30.                 if (m <= f && f <= n)    // 输入的 m、n 是 Fibonacci 值的上、下限,而不是从 m 项到 n 项
  31.                 {
  32.                         printf("%d ", f);
  33.                         count++;
  34.                 }
  35.                 else if (f > n)
  36.                 {
  37.                         break;
  38.                 }
  39.         }
  40.         if (count == 0)
  41.         {
  42.                 printf("No Fibonacci number\n");
  43.         }
  44.         printf("\n");
  45. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-26 16:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表