一、百僧吃百馍问题:
问题描述:100个和尚吃100个馒头,100个和尚中有大和尚和小和尚,一个大和尚能吃3个馒头,三个小和尚能吃1个馒头,问:大和尚和小和尚各有多少个?
用while实现
程序分析:
馒头food一共100个,每少三个,则代表有一个大和尚,每少一个,则代表有三个小和尚,馒头一直在减少,知道馒头数food=0。
代码实现:
public class Monk_eats_buns {
public static void main(String[] args) {
int food = 100; //馒头数
int big_monk = 0; //大和尚数量
int small_monk = 0;//小和尚数量
while (food != 0){
//大和尚一个人吃三个馒头,food-3,大和尚人数big_monk+1
food -= 3;
big_monk += 1;
//此代码可以查看每次大和尚吃完剩下多少个馍,大和尚人数有多少个
// System.out.println("还剩:" + food + "个馍");
// System.out.println("大和尚:" + big_monk);
//小和尚三个人吃一个馒头,food-1,小和尚人数small_monk+3
food -= 1;
small_monk += 3;
//此代码可以查看小和尚吃完还剩多少个馍,小和尚有多少个
// System.out.println("还剩:" + food + "个馍");
// System.out.println("小和尚:" + small_monk);
// System.out.println("-----------------------------------------------------");
}
System.out.println("大和尚一共有:" + big_monk + "个");
System.out.println("小和尚一共有:" + small_monk + "个");
}
}
二、水仙花数
问题描述:一个三位数,每个数的立方的和等于数字本身,给定一个区间,求区间内所有的水仙花数。
使用for循环实现:
程序分析:
1.定义三个变量,将这个数的个位数,十位数,百位数分别赋值给这三个变量,然后将它们的立方和相加,判断是否等于这个数本身,相等的话,将这个数打印出来。
2.问题:如何将这个数的个位数,十位数,百位数拿出来呢?
实现思路:
- 将三位数除以100,得到百位数。
- 将三位数除以10取余,得到十位数。
- 将三位数除以10,得到个位数。
代码实现:
public class Narcissus_Number {
public static void main(String[] args) {
//定义全局变量
int num;
int a; //百位数
int b; //十位数
int c; //个位数
//用for循环来控制范围
for (num = 100;num <= 999;num++) {
//求出百位数,十位数,个位数
a = num / 100;
b = (num / 10) % 10;
c = num % 10;
//判断是否为水仙花数,是的花就打印出来
if ((a * a * a) + (b * b * b) + (c * c * c) == num) {
System.out.println(num);
}
}
}
}
三、猴子吃桃问题
问题描述:一堆桃,猴子第一天吃一半多一个,第二天吃了第一天剩下的一半多一个,依次类推,每天都吃前一天剩下的一半多一个,到第十天就剩下一个桃子。求这堆桃子有多少个?
用for循环实现
程序分析:到第十天时,只剩下了1个桃子,所以我们可以从第九天开始算,第九天应该剩下第十天加一个再乘以2,也就是说,第n天应该是第n+1天的桃子数+1个再乘以2。
代码实现:
public class Monky_eat_peach {
public static void main(String[] args) {
//第十天,还剩一个
int peach_sum = 1;
int day;
//因为第十天还剩一个,所以从第九天开始算,算出剩下每天有多少个
for (day = 9;day >= 1;day--){
peach_sum = (peach_sum + 1) * 2;
System.out.println("第" + day + "天:" + peach_sum);
}
System.out.println(peach_sum);
}
}
四、斐波那契数列(生兔子问题)
问题描述:假设一对兔子每个月可以生一对小兔子,并且每对小兔子出生后的第二个月开始也可以生小兔子。假设兔子不会死亡,那么一对兔子从出生后第三个月开始,每个月都可以生一对新的兔子。如果一开始只有一对兔子,那么经过n个月后,有多少对兔子?
解决这个问题的方法是使用斐波那契数列。
利用for循环
代码实现:
import java.util.Scanner;
// 程序分析:
// 第一个月:1对兔子;
// 第二个月:1对兔子;
// 第三个月:2;
// 第四个月:3;
// 第五个月:5;
// 第六个月:8;
// 第七个月:13
// f(n) = f(n-1) + f(n-2) 第n个月的兔子数应该等于第n-1个月+n-2个月
public class Fibonacci_series {
public static void main(String[] args) {
int month_n; //代表第n个月
int month_1 = 1; //代表第n - 1 个月
int month_2 = 0; //代表第n - 2 个月
Scanner input = new Scanner(System.in);
System.out.println("请输入月份:");
int n = input.nextInt();
for (int month = 1;month <= n;month++){
if(month == 1){
System.out.println("第" + month + "个月" + "有1只兔子");
}else {
month_n = month_1 + month_2; //第n个月的兔子数等于第n-1个月+第n-2个月的兔子数
month_2 = month_1; //进行循环赋值,将第n-2个月的兔子数赋值个下个月的第n-1个月的兔子数
month_1 = month_n; //同理,将第n-1个月的兔子数赋值个下个月的第n个月的兔子数
System.out.println("第" + month + "个月" + "有" + month_n + "只兔子");
}
// 举例:
// #n = 2时
// #第2个月:month_n= 0 + 1 = 1
// #第2-2 = 0个月:month_2 = 0
// #第2-1 = 1个月:month_1 = 1
//
// #n = 3时
// #第3个月:month_n = 1 + 1 = 2
// #第3 - 2 = 1个月:month_2 = 1
// #第3 - 1 = 2个月:month_1 = 2
}
}
}
本人能力有限,写的不好的地方请指正!