文章目录
鸡兔同笼算法
在上一期讲到了Java的数组,上上期是Java的流程控制,上上上期讲的是数据类型和运算符,上上上上期讲到的是面向对象,下面来进行综合练习,求经典题目:鸡兔同笼(如果你有孩子了,给你孩子写个这样的算法吧)!
假设鸡 求出兔 得结果
import java.util.Scanner;
public class Main {
/**
* CSDN:第三女神
* https://myhub.blog.csdn.net/
* <p>
* 鸡兔同笼(假设法求解)
*
* @param args
*/
public static void main(String[] args) {
int headNum;
int footNum;
Scanner scanner = new Scanner(System.in);
System.out.println("==鸡兔同笼==");
System.out.println("请输入鸡兔一共有多少个头:");
headNum = scanner.nextInt();
System.out.println("请输入鸡兔一共有多少个脚:");
footNum = scanner.nextInt();
//假设全是鸡,全是鸡应该有多少个脚
int guessChickenFoot = 2 * headNum;
//鸡脚比总数少多少?
int differenceSumFoot = footNum - guessChickenFoot;
//兔子脚比鸡脚多多少?
int differenceFoot = 4 - 2;
//那么兔子的只数就等于少的脚除以兔子脚比鸡脚多的数量
int rabbitNum = differenceSumFoot / differenceFoot;
//那么总头数减去求出的兔子的只数就是鸡的数量
int chickenNum = headNum - rabbitNum;
//得:
System.out.println("鸡的数量是:" + chickenNum + "只;兔子的数量就是:" + rabbitNum + "只");
}
}
假设兔 求出鸡 得结果
import java.util.Scanner;
public class Main {
/**
* CSDN:第三女神
* https://myhub.blog.csdn.net/
* <p>
* 鸡兔同笼(假设法求解)
*
* @param args
*/
public static void main(String[] args) {
int headNum;
int footNum;
Scanner scanner = new Scanner(System.in);
System.out.println("==鸡兔同笼==");
System.out.println("请输入鸡兔一共有多少个头:");
headNum = scanner.nextInt();
System.out.println("请输入鸡兔一共有多少个脚:");
footNum = scanner.nextInt();
//假设全是兔,全是兔应该有多少个脚
int guessRabbitFoot = 4 * headNum;
//兔脚比总数多多少?
int differenceSumFoot = guessRabbitFoot - footNum;
//兔子脚比鸡脚多多少?
int differenceFoot = 4 - 2;
//那么鸡的只数就等于多的脚除以兔子脚比鸡脚多的数量
int chickenNum = differenceSumFoot / differenceFoot;
//那么总头数减去求出的鸡的只数就是兔的数量
int rabbitNum = headNum - chickenNum;
//得:
System.out.println("鸡的数量是:" + chickenNum + "只;兔子的数量就是:" + rabbitNum + "只");
}
}
抬腿法
抬腿法有:
- 鸡抬一只脚,兔抬两只脚,求兔,得鸡
- 鸡坐地(抬两只脚),兔抬两只脚,求兔,得鸡
- 兔抬脚,求兔,得鸡
鸡抬一只脚,兔抬两只脚,求兔,得鸡
import java.util.Scanner;
public class Main {
/**
* CSDN:第三女神
* https://myhub.blog.csdn.net/
* <p>
* 鸡兔同笼(抬腿法求解)
*
* @param args
*/
public static void main(String[] args) {
int headNum;
int footNum;
Scanner scanner = new Scanner(System.in);
System.out.println("==鸡兔同笼==");
System.out.println("请输入鸡兔一共有多少个头:");
headNum = scanner.nextInt();
System.out.println("请输入鸡兔一共有多少个脚:");
footNum = scanner.nextInt();
//假设所有的鸡抬起一只脚,所有的兔子抬起两只脚,那么此时兔脚数比鸡脚数多1,脚与头的总数差,就是兔子的数量
//抬脚,求剩余脚
int remainderFoot = footNum / 2;
//脚与头的总数差就是兔子的只数
int rabbitNum = remainderFoot - headNum;
//头数减兔子只数就是鸡的数量
int chickenNum = headNum - rabbitNum;
//得:
System.out.println("鸡的数量是:" + chickenNum + "只;兔子的数量就是:" + rabbitNum + "只");
}
}
鸡坐地(抬两只脚),兔抬两只脚,求兔,得鸡
import java.util.Scanner;
public class Main {
/**
* CSDN:第三女神
* https://myhub.blog.csdn.net/
* <p>
* 鸡兔同笼(抬腿法求解)
*
* @param args
*/
public static void main(String[] args) {
int headNum;
int footNum;
Scanner scanner = new Scanner(System.in);
System.out.println("==鸡兔同笼==");
System.out.println("请输入鸡兔一共有多少个头:");
headNum = scanner.nextInt();
System.out.println("请输入鸡兔一共有多少个脚:");
footNum = scanner.nextInt();
//假设鸡抬起两只脚,兔子也抬起两只脚,那么地上的全是兔的脚,可求兔,得鸡
//全抬脚,求剩余脚
int remainderFoot = footNum - headNum * 2;
//求兔
int rabbitNum = remainderFoot / 2;
//头数减兔子只数就是鸡的数量
int chickenNum = headNum - rabbitNum;
//得:
System.out.println("鸡的数量是:" + chickenNum + "只;兔子的数量就是:" + rabbitNum + "只");
}
}
兔抬脚,求兔,得鸡
import java.util.Scanner;
public class Main {
/**
* CSDN:第三女神
* https://myhub.blog.csdn.net/
* <p>
* 鸡兔同笼(抬腿法求解)
*
* @param args
*/
public static void main(String[] args) {
int headNum;
int footNum;
Scanner scanner = new Scanner(System.in);
System.out.println("==鸡兔同笼==");
System.out.println("请输入鸡兔一共有多少个头:");
headNum = scanner.nextInt();
System.out.println("请输入鸡兔一共有多少个脚:");
footNum = scanner.nextInt();
//先让兔子抬起来两只脚,求剩余脚,求差,求抬了多少脚,求兔,得鸡
//兔子抬两只脚,求剩余脚
int remainderFoot = headNum * 2;
//差多少只脚?
int differenceFoot = footNum - remainderFoot;
//差的脚除以抬起的两只脚,求兔
int rabbitNum = differenceFoot / 2;
//头数减兔子只数就是鸡的数量
int chickenNum = headNum - rabbitNum;
//得:
System.out.println("鸡的数量是:" + chickenNum + "只;兔子的数量就是:" + rabbitNum + "只");
}
}
列表法(穷举法)
穷举,即列出所有情况,但是注意加上退出循环条件哟!以防死循环!
import java.util.Scanner;
public class Main {
/**
* CSDN:第三女神
* https://myhub.blog.csdn.net/
* <p>
* 鸡兔同笼(列表法求解)
*
* @param args
*/
public static void main(String[] args) {
int headNum;
int footNum;
Scanner scanner = new Scanner(System.in);
System.out.println("==鸡兔同笼==");
System.out.println("请输入鸡兔一共有多少个头:");
headNum = scanner.nextInt();
System.out.println("请输入鸡兔一共有多少个脚:");
footNum = scanner.nextInt();
//开始假设,初始化鸡的数量是1
int createChicken = 1;
//初始化兔的数量减去初始化
int createRabbit = headNum - createChicken;
//列表,穷举
while (true) {
if (footNum == createChicken * 2 + createRabbit * 4) {
//得:
System.out.println("鸡的数量是:" + createChicken + "只;兔子的数量就是:" + createRabbit + "只");
break;
} else {
createChicken++;
createRabbit--;
//加入条件判断,以防死循环
if (createRabbit < 0) {
System.out.println("无符合条件");
break;
}
}
}
}
}
好了,你给孩子们写出了这个算法,他们从4小时的作业时间,减去了两个小时!!!
请为我点赞!!!也可以给个关注!!!
下一篇
Java 类和对象 今年的第一篇文章 https://myhub.blog.csdn.net/article/details/103794466