第一种方式(虽然好理解,但最笨最不提倡):
package com.itheima.dome;
public class Demo01 {
public static void main(String[] args) {
//用于计算运算了多少次
int count = 0;
//公鸡的数量
for (int i = 0; i <= 100; i++) {
//母鸡的数量
for (int j = 0; j <=100 ; j++) {
//小鸡的数量
for (int k = 3; k <=100 ; k++) {
count++;
if (i*5+j*3+k/3==100 && i+j+k==100&&k%3==0)
System.out.printf("公鸡%2d只,母鸡%2d只,小鸡%2d只%n",i,j,k);
}
}
}
System.out.println("共进行了"+count+("次循环"));
}
}
运行结果:
第二种方式:
package com.itheima.demo;
public class Demo02 {
public static void main(String[] args) {
//用于计算运算了多少次
int count = 0;
//公鸡的数量(公鸡最多买20只)
for (int i = 0; i <= 20; i++) {
//母鸡的数量(母鸡最多买33只)
for (int j = 0; j <=33 ; j++) {
//小鸡的数量(100-公鸡数量-母鸡数量)
for (int k = 3; k <=100-i-j ; k+=3) {
count++;
if (i*5+j*3+k/3==100 && i+j+k==100)
System.out.printf("公鸡%2d只,母鸡%2d只,小鸡%2d只%n",i,j,k);
}
}
}
System.out.println("共进行了"+count+("次循环"));
}
}
运算结果:
第三种方式:
package com.itheima.dome;
public class Demo03 {
public static void main(String[] args) {
//用于计算运算了多少次
int count = 0;
//第1层循环,用于表示公鸡的范围,初始化表达式的变量定义为 x=0,判断条件是x<=20
for(int x=0; x<=20; x++) {
//第2层循环,用于表示鸡母的范围,初始化表达式的变量定义为 y=0,判断条件是y<=33
for(int y=0; y<=33; y++) {
//这个时候,用于表示鸡雏的变量 z = 100 – x – y
int z = 100 - x - y;
//判断表达式 z%3==0 和表达式 5*x + 3*y + z/3 = 100 是否同时成立
if(z%3==0 && 5*x+3*y+z/3==100) {
System.out.printf("公鸡%2d只,母鸡%2d只,小鸡%2d只%n",x,y,z);
}
count++;
}
}
System.out.println("共进行了"+count+("次循环"));
}
}
运算结果:
第四种方式(最推荐的):
package com.itheima.dome;
public class Demo04 {
public static void main(String[] args) {
//用于计算运算了多少次
int count = 0;
//第1层循环,用于表示公鸡的范围,初始化表达式的变量定义为 x=0,判断条件是x<=20
for(int x=0; x<=20; x++) {
//第2层循环,用于表示鸡母的范围,初始化表达式的变量定义为 y=0,
// 判断条件是y<=(100-x*5)/3 (买公鸡剩下的钱除以母鸡的单价)
int Max_y = (100- x*5)/3; //(因为避免每次内循环再次计算)
for(int y=0; y <= Max_y; y++) {
//这个时候,用于表示鸡雏的变量 z = 100 – x – y
int z = 100 - x - y;
//判断表达式 z%3==0 和表达式 5*x + 3*y + z/3 = 100 是否同时成立
if(z%3==0 && 5*x+3*y+z/3==100) {
System.out.printf("公鸡%2d只,母鸡%2d只,小鸡%2d只%n",x,y,z);
}
count++;
}
}
System.out.println("共进行了"+count+("次循环"));
}
}
运算结果:
通过最内层循环的次数来看,这四种方法是,从第一种到第四种,效率上是越来越高的