| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 7401 人关注过本帖
标题:使用函数输出指定范围内的Fibonacci数 求大佬帮我改一下 输出答案都对就是格 ...
只看楼主 加入收藏
parthenope
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2017-12-12
结帖率:0
收藏
已结贴  问题点数:20 回复次数:6 
使用函数输出指定范围内的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;
}

/* 你的代码将被嵌在这里 */





int fib( int n )
{
  int i,x1=1,x2=1,x;
  if(n==1||n==2)
      return 1;
  for(i=3;i<=n;i++){
    x=x1+x2;
    x1=x2;
    x2=x;
  }
  return x;
}
void PrintFN( int m, int n )
{
    int j,a=0;
    for(j=1;j<=n;j++){
        if(fib(j)>=m&&fib(j)<=n){
            printf("%d ",fib(j));
            a++;
        }
    }
    if(a==0)
            printf("No Fibonacci number");
}


输出最后一个数的时候怎么把空格去掉QAQ
图片附件: 游客没有浏览图片的权限,请 登录注册

搜索更多相关主题的帖子: 函数 输出 范围 Fibonacci int 
2017-12-12 11:26
parthenope
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2017-12-12
收藏
得分:0 
图片附件: 游客没有浏览图片的权限,请 登录注册
图片附件: 游客没有浏览图片的权限,请 登录注册
那个空格怎么去QAQ
2017-12-12 11:30
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:10 
为啥不打表呢,打表后直接从表里面取fib(t),fit(t+1),fit(t+2)……先打印第一个数,然后空格第二个数,空格第三个数……就可以了~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-12-12 11:49
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:10 
程序代码:
#include <stdio.h>

int fib( int n );
void PrintFN( int m, int n );

int main( void )
{
    int m, n, t;
    scanf( "%d%d%d", &m, &n, &t );
    printf( "fib(%d) = %d\n", t, fib(t) );
    PrintFN( m, n) ;

    return 0;
}

int fib( int n )
{
    int a=1, b=0;
    for( int i=0; i!=n; ++i )
    {
        b = a+b;
        a = b-a;
    }
    return b;
}

void PrintFN( int m, int n )
{
    int i=0, v;
    for( ; v=fib(i),v<m; ++i );
    if( v > n )
    {
        printf( "%s", "No Fibonacci number" );
        return;
    }

    printf( "%d", v );
    for( ++i; v=fib(i),v<=n; ++i )
        printf( " %d", v );
}
2017-12-12 12:23
parthenope
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2017-12-12
收藏
得分:0 
回复 4楼 rjsp
void PrintFN( int m, int n )
{
    int i=0, v;
    for( ; v=fib(i),v<m; ++i );
    if( v > n )
    {
        printf( "%s", "No Fibonacci number" );
        return;
    }

    printf( "%d", v );
    for( ++i; v=fib(i),v<=n; ++i )
        printf( " %d", v );
}
这一段看不太懂 可以麻烦大佬解释下吗!!
2017-12-12 12:44
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
结合题意,4楼正解~

其实我还打算打表实现的,不过看了一下题目已经给定函数原型了,当然还是拿出来看看,方便的话可以参考一下~

程序代码:
#include<stdio.h>

#define MAX 10000

size_t GetFib( unsigned [],size_t );
void PrintFib(unsigned [],size_t );

int main( void )
{
    unsigned k[50];
    
    unsigned n;
    unsigned m;
    
    PrintFib(k,GetFib(k,sizeof (k)/sizeof (*k)));
    
    return 0;
}

size_t GetFib( unsigned k[],size_t n)
{
    size_t i;
    
    k[0]=1;
    k[1]=1;
    
    for (i=1;k[i]<=MAX&&i!=n-1;++i)
        k[i+1]=k[i]+k[i-1];
       
    return i;
}

void PrintFib(unsigned k[],size_t n)
{
    size_t i=0;
    
    for (i=0;i!=n;++i)
        printf("%u\n",k[i]);
}



[此贴子已经被作者于2017-12-12 15:50编辑过]


[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-12-12 15:48
parthenope
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2017-12-12
收藏
得分:0 
回复 6楼 九转星河
谢谢大佬 但我还没学数组不知道什么是打表。。。。
2017-12-13 10:01
快速回复:使用函数输出指定范围内的Fibonacci数 求大佬帮我改一下 输出答案都对 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016812 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved