A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

/*
                1、 求斐波那契数列第n项,n<30,斐波那契数列前10项为 1,1,2,3,5,8,13,21,34,55

                需求:
                1.懂得如何构造斐波拉契数列,即:a=b=1;c=a+b;a=b;b=c;
                2.只求第n项,因此要使用Scanner输入数字n;
                3.要求n<30,在n>=30时,输出“n大于30不行”;
                4.自己添加的多次循环,n<=0时中断。

                现在菜鸟我花了半小时完成需求,求高手帮忙简化代码;
*/

import java.util.Scanner;    //通过键盘输入一个n
class Demo
{
        public static void main(String[] args)
        {
                while(true)                //多次循环
                {
                        Scanner sc = new Scanner(System.in);
                        System.out.println("请输入一个小于30的数字n:");
                        int n = sc.nextInt();
                        if(n>=30)   //判断n的大小
                        {
                                System.out.println("输入的数字n不合法");
                        }
                        else if(n>=1)        //n介于1和29间时,输出斐波那契中该项
                        {
                                int a = 1;int b = 1;
                                if(n==1)
                                {
                                        System.out.println("斐波那契数列第1项为:1");
                                }
                                else
                                {
                                        for (int i = 1;i <= n ;i++ )
                                        {
                                                int c = a+b;
                                                a = b ;
                                                b = c;
                                                if(i+1 == n)                //判断数列中第n项并输出
                                                {
                                                                System.out.println("斐波那契数列第"+n+"项为:"+a);
                                                }
                                        }
                                }
                        }
                        else                //当n<=0时,中断循环
                        {
                                break;
                        }
                }
        }
}

8 个回复

正序浏览
//兔子
        int i;//j月兔子个数
        int j=3;//第几个月数
        int a1=1;
        int a2=1;
        while (j<10)
        {
                i = a1 + a2;
                System.out.print("第"+j+"个月兔子的对数 "+i+"\n");       
                a1=a2;a2=i;
                j++;
        }
回复 使用道具 举报
可以用递归
回复 使用道具 举报
Super_Nos 发表于 2015-5-2 21:59
import java.util.Scanner;
public class TestDemo {
        public static void main(String[] args) {

学C语言时,最害怕的就是数组和指针,因为我睡觉的时候还在听课;P
回复 使用道具 举报
Super_Nos 发表于 2015-5-2 21:59
import java.util.Scanner;
public class TestDemo {
        public static void main(String[] args) {

我感觉n不是特别大的时候直接用数组不是更好吗?
回复 使用道具 举报
import java.util.Scanner;
public class TestDemo {
        public static void main(String[] args) {
                Scanner sc = new Scanner(System.in);
                int i, n;
                int[] a = new int[31];
                a[1] = a[2] = 1;
                while(sc.hasNext()){
                        n = sc.nextInt();
                        if(n > 30 || n < 1)
                                System.out.println("输入不合法!");
                        for(i = 3; i <= n; i ++){
                                a[i] = a[i - 1] + a[i - 2];
                        }
                        System.out.println("斐波那契数列第" + n + "项为:" + a[n]);
                }
        }
}
回复 使用道具 举报 1 0
这就行了比我写的都简便
回复 使用道具 举报
不错不错...刚看懂..
回复 使用道具 举报
兄弟,这就可以了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马