java程序设计:输入2 个正整数m和n(1<=m,n<=10000),输出m 和n之间所有的Fibonacci数。

public static void main(String args[]){
int ri,repeat;
int i, m, n;
long f;
Scanner in=new Scanner(System.in);
repeat=in.nextInt();
for(ri=1; ri<=repeat; ri++){
m=in.nextInt();
n=in.nextInt();
/*---------*/
f=1;
while(f>=m&&f<=n){
f=fib(m);
m++;
System.out.print(f+" ");}
System.out.println();
}
}
/*------------*/
static int fib(int n){
if(n==1) return 1;
if(n==2) return 1;
else return fib(n-2)+fib(n-1);
}

各位高手帮我看一看哪里错了,在线等,急急急

修改一下main就行了

public static void main(String args[])
 {
    int ri,repeat;
    int i, m, n;
    long f;
    Scanner in=new Scanner(System.in);
    repeat=in.nextInt();
    for(ri=1; ri<=repeat; ri++)
    {
        m=in.nextInt();
        n=in.nextInt();
        for(i=1;;i++)
        {
           if(fib(i)>=m && fib(i)<=n)//值在m,n之前就输出
           {
              System.out.print(fib(i)+" ");
           }
           if(fib(i)>n)//超过输出, 中止循环
             break;

        }
        System.out.println("\n");
   } 

结果:

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-04-28
将你的
f=1;
while(f>=m&&f<=n){
f=fib(m);
m++;
System.out.print(f+" ");}
System.out.println();
}

替换成
i = 1;
do {
f = fib(i);
i++;
if (f >= m && f <= n)
System.out.print(f + " ");
else if (f > n)
break;
} while (true);

你的代码主要有几个问题:
1.你的fib(m)方法的参数m的意思是第几个fib数,而m是fib数的范围起点,而非顺序起点。就是说m表示的是从大于m的数开始,而不是从第m个fib数开始
2.你定义的f是用来保存算出来的fib数的,而不是用来控制循环次数的,应该用另外一个和f无关的i来表示循环执行的次数,每次算出第i个fib数,并判断他是否处于m和n之间,如果小于m则不打印,继续下次循环,如果大于n则中断循环。追问

那怎么控制i 的范围呢?具体在程序里怎么写呢?谢谢~~

追答

我已经给你代码了呀,你仔细看我的回答,刚才代码格式有问题,我换成普通文本了

追问

while(true)是怎么回事?前面没有控制true的布尔函数啊?

...个正整数m和n(1<=m,n<=10000),输出m 和n之间所有的Fibonacci数。_百...
public static void main(String args[]) { int ri,repeat; int i, m, n; long f; Scanner in=new Scanner(System.in); repeat=in.nextInt(); for(ri=1; ri<=repeat; ri++) { m=in.nextInt(); n=in.nextInt(); for(i=1;;i++) { if...

输入2 个正整数m和n(1<=m,n<=10000),输出m 和n之间所有的Fibonacci数...
import java.util.Scanner;public class Test { public static void main(String args[]) { int ri, repeat;int i, m, n;long f;Scanner in = new Scanner(System.in);repeat = in.nextInt();for (ri = 1; ri <= repeat; ri++) { m = in.nextInt();n = in.nextInt();for ...

输入一个正整数repeat (0<repeat<10),做repeat次下列运算:
int main( ){ int ri,repeat;int i, m, n;long f;long fib(int n);scanf("%d",&repeat);for(ri=1;ri<=repeat;ri++){ scanf("%d%d", &m, &n);for(i=1;;i++){ f=fib(i);if(f>=m&&f<=n) printf("%ld ",f);if(f>n) break;} printf("\\n");} } long fib(...

C语言:输入两个正整数m和n(m=1,n=10000),输出m~n之间的所有Fibonacci数...
实现程序,输入两个正整数m和n(m=1,n=10000),通过调用fib函数计算m~n之间的所有Fibonacci数,输出结果。具体步骤如下:读入两个正整数m和n。使用for循环,从i=m开始迭代,当i小于等于n时循环继续执行。在循环内部,调用fib函数计算当前i对应的Fibonacci数,输出结果。循环结束后,程序结束。

C语言:输入两个正整数m和n(m>=1,n<=10000),输出m~n之间的所有Fibonacci...
简单的说,楼主伸手党……int fib(int temp);void My_work(int m, int n);{ for(int i=0; i<10000; i++){ if(fib(i)<m)i++;else if(fib(i)>=m && fib(i)<=n){ i++;cout<<fib(i)<<endl;} else break;} } 仅供参考,楼上写的完全c++风格,怎么感觉还不如c来的直爽...

...n(m≥1,n≤10 000),输出m ~n 之间所有的Fibonacci数。
int m,n,k,i;int fib(int i);printf("Input m: ");scanf("%d",&m);printf("Input n: ");scanf("%d",&n);for(k=m;k<=n;k++)for(i=1;fib(i)<=n;i++){ if(k==fib(i))printf("%.d ",k);} return 0;} int fib(int i){ if(i==1)return 1;if(i==2)ret...

C语言:输出m ~n 之间所有的Fibonacci 数
输入2个正整数m和n(m≥1,n≤10 000),输出m ~n 之间所有的Fibonacci数。Fibonacci数列(第一项起):1,1,2,3,5,8,13,21,…。定义并调用函数fib(n),它的功能是返回第n项Fibonacci 数。例如,fib(7)的返回值是13。【输入形式】从... 展开 峰★印 ...

输入2 个正整数m 和n(m≥1,n≤1 000),输出m ~n 之间的所有完数
int i;long wanshu=0;int n,x,y;cout<<"输入n:"<<endl;cin>>n;cout<<"输入x:"<<endl;cin>>x;cout<<"输入y:"<<endl;cin>>y;for(i=1;i<=n;i+=2){ wanshu+=pow(i,3);if(wanshu==1){ continue;} if(wanshu>=x&&wanshu<=y)cout<<"n以内的完数:"<<wanshu<<"\\t...

急!!输入2个正整数m和n(m>=1,n<=1000),输出m~n之间的所有完数,完数就是...
int m,n,a; m>=1; n<=1000; scanf("%d,%d",&m,&n);\/\/要输入逗号 你输入数据时有没输入逗号呢? for (a=m;a<=n;a++) {if (a==factorsum(a))\/\/是等于号 就这一个问题 其它地方都是对的 printf("%d ",a); } } int factorsum(int number) {int i=1,a=0; for(i=1;i<number;i...

1、 输入2个正整数m和n(1<=m,n<=6),然后输入该m行n列矩阵a中的元素,分 ...
1、 输入2个正整数m和n(1<=m,n<=6),然后输入该m行n列矩阵a中的元素,分别求出各行元素之和,并输出。 a306200119 | 浏览7358 次 |举报 我有更好的答案推荐于2017-12-16 09:33:15 最佳答案 #include <stdio.h>int main(){ int m,n; int i,j,s,d; printf("请输入m:"); scanf("%d",&...

相似回答