趣味思考
鸡兔同笼,共有head个头,foot个脚,问鸡、兔各多少只?
分析:鸡的头数*2=鸡的脚数
兔的头数*2*2=兔的脚数
那么,脚的总数-头的总数*2=???显然,等于的是兔子比鸡多的脚数,而一只兔比一只鸡多了2只脚,所以兔子数是(脚的总数-头的总数*2)/2,问题迎刃而解。代码如下:
package thinking;
import java.util.Scanner;//导包
public class MyThinking {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);//创建键盘录入对象
System.out.println("请输入头数");
int head = sc.nextInt();//接收键盘录入数据
System.out.println("请输入脚数");
int foot = sc.nextInt();//接收键盘录入数据
int RabbitNum = (foot - 2*head)/2;
int ChickenNum = head - RabbitNum;
if (RabbitNum>=0&&ChickenNum>=0) {
System.out.println("鸡的个数是"+ChickenNum);
System.out.println("兔子的个数是"+RabbitNum);
}else{
System.out.println("你输入的数据有误");
}
}
}
当然也可以像下边这样写,但是我倾向于第一种方法,因为编程更多的是注重思维能力,如果可以通过逻辑思考找出简单易行的方法,为何不用呢?
package thinking;
import java.util.Scanner;//导包
public class Mythinking2 {
static int chickenNum,rabbitNum;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);//创建键盘录入对象
System.out.println("请输入 头数");
int head = sc.nextInt();//接收键盘录入数据
System.out.println("请输入 脚数");
int foot = sc.nextInt();//接收键盘录入数据
boolean flag = chickenAndRabbit(head,foot);
if (flag) {
System.out.println("鸡的个数是"+chickenNum);
System.out.println("兔子的个数是"+rabbitNum);
}else {
System.out.print("您输入的数据有误");
}
}
public static boolean chickenAndRabbit(int head, int foot){
boolean flag = false;
for (int i = 0; i <= head; i++) {
int j = head - i;
if (i*2+j*4 == foot) {
flag = true;
chickenNum = i;
rabbitNum = j;
}
}
return flag;
}
}
明显第二种方法代码冗长,效率也不够高。