- 前言
- 一、编写程序解决“百钱买百鸡”问题。公鸡五钱一只,母鸡三钱一只,小鸡一钱三只,现有百钱欲买百鸡,共有多少种买法?
- 二、猴子吃桃问题。猴子第一天摘下若干个桃子,当时就吃了一半,还不过瘾,就又吃了一个。第二天又将剩下的桃子吃掉一半,又多吃了一个。以后每天都吃前一天剩下的一半零一个。到第 10 天在想吃的时候就剩一个桃子了,求第一天共摘下来多少个桃子?
- 三、古典问题:有一对兔子,从出生后第 3 个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
- 总结
前言
今天做了一些关于经典的古典问题的Java编程题,想来和大家一起分享一下。
或许还有比这里写的更好的方法,欢迎大家来指正和讨论。
一、编写程序解决“百钱买百鸡”问题。公鸡五钱一只,母鸡三钱一只,小鸡一钱三只,现有百钱欲买百鸡,共有多少种买法?
这道题,我先是自己写了一下,感觉自己写的太过于复杂了,于是到网上找了一些大佬们写的,看了之后,感觉他们写的代码更加精辟,又简单明了,在这里分享给大家。(里面的代码我都详细的注释了)
代码如下:
public class Homework11 {
public static void main(String[] args){
way1();
way2();
}
//方法一:这个是一个网上大佬写的,逻辑清晰,简单明了,建议看这个
static void way1(){
//设公鸡数为cock
for(int cock=0;cock<=20;cock++){
//设母鸡数为hen
for(int hen=0;hen<=33;hen++){
//钱数为100,鸡数为100
if(cock*5+hen*3+(100-cock-hen)/3 == 100 && (100-cock-hen)%3 == 0){
System.out.println("公鸡" + cock + "只,母鸡" + hen + "只,小鸡" + (100 - cock - hen) + "只。");
}
}
}
}
//根据大佬的做法改了一点的,练练手
static void way2(){
//设公鸡数x
for(int x=0;x<20;x++){
//设母鸡数y
for (int y=0;y<33;y++){
//设小鸡数z
for (int z=0;z<300;z++){
if(x*5+y*3+z/3==100 && x+y+z==100 && z%3 == 0){
System.out.println("公鸡"+x+"只,母鸡"+y+"只,小鸡"+z+"只。");
}
}
}
}
}
}
结果如下:
公鸡0只,母鸡25只,小鸡75只。 公鸡4只,母鸡18只,小鸡78只。 公鸡8只,母鸡11只,小鸡81只。 公鸡12只,母鸡4只,小鸡84只。 公鸡0只,母鸡25只,小鸡75只。 公鸡4只,母鸡18只,小鸡78只。 公鸡8只,母鸡11只,小鸡81只。 公鸡12只,母鸡4只,小鸡84只。二、猴子吃桃问题。猴子第一天摘下若干个桃子,当时就吃了一半,还不过瘾,就又吃了一个。第二天又将剩下的桃子吃掉一半,又多吃了一个。以后每天都吃前一天剩下的一半零一个。到第 10 天在想吃的时候就剩一个桃子了,求第一天共摘下来多少个桃子?
代码如下:
public class Homework16 {
public static void main(String[] args){
int total=1;
//天数初始为10,然后往下减
int day=10;
//循环
for(int i=10;i>0;i--){
System.out.println("第"+day+"天有"+total+"个桃子");
//桃子的算法
total = (total+1)*2;
day--;
}
}
}
结果如下:
第10天有1个桃子 第9天有4个桃子 第8天有10个桃子 第7天有22个桃子 第6天有46个桃子 第5天有94个桃子 第4天有190个桃子 第3天有382个桃子 第2天有766个桃子 第1天有1534个桃子三、古典问题:有一对兔子,从出生后第 3 个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
这个问题,如果就那么一直想,自己的思绪会很乱,把每个月的兔子数列出来后,就会发现就是一个单纯的数学问题而已。
代码如下(配备详细的注释):
import java.util.Scanner;
public class Homework19 {
public static void main(String[] args){
way1();
way2();
}
//方法一:直接输出所有月份的月子数
static void way1(){
//i为初始兔子对数,j为每月增加兔子对数
int i=1,j=0;
for(int month=1;month<=12;month++){
int x = i;
System.out.println("第"+month+"个月有"+2*i+"只兔子");
i = i +j;
j = x;
}
System.out.println();
}
//方法二:输入月份找兔子的方法(下面两个是一起的)
static void way2(){
Scanner sc = new Scanner(System.in);
System.out.println("请输入月份:");
int n = sc.nextInt();
System.out.println("第"+n+"月兔子数为:"+2*fun(n));
}
//计算每月兔子的方法(如果看懂规律,这是最简单明了了)
static int fun(int n){
if(n==1||n==2) {
//这里的1为兔子对数
return 1;
}
else{
return fun(n-1)+fun(n-2);
}
}
}
结果如下:
第1个月有2只兔子 第2个月有2只兔子 第3个月有4只兔子 第4个月有6只兔子 第5个月有10只兔子 第6个月有16只兔子 第7个月有26只兔子 第8个月有42只兔子 第9个月有68只兔子 第10个月有110只兔子 第11个月有178只兔子 第12个月有288只兔子 请输入月份: 8 第8月兔子数为:42
总结
提示:这里对文章进行总结:
这些问题说是古典问题,实际上都是一些数学问题,不要光看题目,自己一个人乱想,把自己弄懵了。



