必会几个简单的循环问题Java实现(1.百僧吃百馍2.水仙花数3.猴子吃桃4.斐波那契数列)

1.百僧吃百馍

有大和尚和小和尚共一百人和馍100个,一个大和尚要吃三个馍,三个小和尚吃一个馍,问大和尚和小和尚人数分别为多少?
用i表示大和尚人数,j表示小和尚人数.有i+j=100.并且小和尚人数要能整除3.不能出现0.几个人
代码如下:

public class Eat {
    public static void main(String[] args) {
        //百僧吃百膜
        int Sum=100;
        for(int i=0;i<=100;i++){//i代表大和尚的人数
            for (int j=100-i;j<=100;j++)
            {
                if (j%3!=0)break;//如果j不能整除3,退出本次循环
                if((i*3+j/3)==Sum){
                    System.out.println("大和尚人数为:"+i+"人,小和尚人数为:"+j+"人。");
                }
            }//用j表示小和尚人数
        }//用i表示大和尚的人数
    }
}

在这里插入图片描述

2.水仙花数

水仙花数是指一个 n 位数 ( n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身。例如,一个 3 位数 153 就是一个水仙花数,因为 1^3 + 5^3 + 3^3 = 1 + 125 + 27 = 153。编写一个程序来打印所有的水仙花数。

public class ShuiXianHua {
    public static void main(String[] args) {
        for(int i=100;i<1000;i++){
            int num=i,j=0;
            int[] _num=new int[3];
            while (num!=0)
            {
                _num[j++]=num%10;
                num/=10;
            }
            if (_num[0]*_num[0]*_num[0]+_num[1]*_num[1]*_num[1]+_num[2]*_num[2]*_num[2]==i) System.out.println(i);
        }
    }
}

在这里插入图片描述

3.猴子吃桃问题。

问题描述如下:有一堆桃子,猴子第一天吃了其中的一半,并再多吃了一个;以后每天猴子都吃其中的一半,并再多吃一个。到第十天时,想再吃时(还没吃),发现只有一个桃子了。求原来有多少个桃子。
反过来求用第十天的桃子+1在乘以2就等于第九天的桃子
因为第十天没吃桃,所以只吃了九天

public class MonkeyEatPeach {
    public static void main(String[] args) {
        //猴子吃桃 一堆桃,第一天,猴子吃其中的一半多一个,第二天吃其中剩下的一半多一个,以此类推到第十天剩下一桃子,原先有多少桃?
        int sum=1;//第十天剩下一个
        //每天多吃一半多一个
        for (int i=1;i<=9;i++){//吃了九天 所以i=9 第十天还没吃 发现只剩一个了
            sum=(sum+1)*2;
        }
        System.out.println("原先有桃:"+sum+"个。");
    }
}

在这里插入图片描述

4.斐波那契数列

斐波那契数列是由 0 和 1 开始,后面的每一项数字都是前两项数字的和。换句话说,第 n 个数字是第 n-1 个数字和第 n-2 个数字的和。数学上,斐波那契数列可以定义为如下形式:F(n)=F(N-1)+F(N-2)(N>2)
该程序采用了递归的方法

public class FibonacciSeq {
    public static int  Fibonacci(int n){
        if(n==1||n==2){return 1;}
        else {
            return Fibonacci(n-1)+Fibonacci(n-2);
        }
    }
    public static void main(String[] args) {
        //斐波那契数列: 1 1 2 3 5 8 13...
        //特点:从第三项开始 每一项都为前两项的和
        //输出十个斐波那契数列
        for(int i=1;i<=10;i++){
            System.out.print(Fibonacci(i)+"      ");
        }
    }
}

在这里插入图片描述

这几个循环在面试中也有极大的可能会问到,需要牢固掌握。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值