目录
一、前言:
By: RuoChen404(Larry,另外一个名字)
CSDN: 钱塘江上潮信来,今日方知我是我
原创内容,转载须说明及网页地址
二、原理:
核心算法(应该说是公式优化)
y = n/2-m; x = m-y;
m为头数,n为脚数,x为 只因 数,y为兔数
原理:m == x+y; n == 2*x+4*y; 0 < 2m ≤ n ≤ 4m
三、Java代码:
import java.util.*;
public class JiTu{
public static void main (String args[]){
int m=0,n=0,x=0,y=0;//头数m,脚数n,鸡数x,兔数y
Scanner sc = new Scanner(System.in);
System.out.print("鸡兔同笼问题:\n请输入共有多少个头:\n");
m = sc.nextInt();
System.out.println("请输入共有多少只脚:");
n = sc.nextInt();
if(n%2!=1){
y=n/2-m;
x=m-y;
if(x>0&&y>0)System.out.println("一共有"+x+"只鸡和"+y+"只兔");
else System.out.println("输入不合理,无法得出结果");
}
else System.out.println("输入错误,脚数为偶数");
}
}
四、C/C++代码:
C++源码:
#include <iostream>
//using std::cout,std::cin; 连续声明
using std::cout;
using std::cin;
int main(){
//std::ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);关闭同步流
int m=0,n=0,x=0,y=0;
cout<<"鸡兔同笼问题:\n请输入共有多少个头:\n";
cin>>m;
cout<<"请输入共有多少只脚:\n";
cin>>n;
if(n%2!=1){
y=n/2-m;
x=m-y;
if(x>0&&y>0)cout<<"一共有"<<x<<"只鸡和"<<y<<"只兔";
else cout<<"输入不合理,无法得出结果";
}
else cout<<"输入错误,脚数为偶数";
return 0;
}
C源码:
#include <stdio.h>
int main(){
int m=0,n=0,x=0,y=0;
printf("鸡兔同笼问题:\n请输入共有多少个头:\n");
scanf("%d",&m);
printf("请输入共有多少只脚:\n");
scanf("%d",&n);
if(n%2!=1){
y=n/2-m;
x=m-y;
if(x>0&&y>0)printf("一共有%d只鸡和%d只兔",x,y);
else printf("输入不合理,无法得出结果");
}
else printf("输入错误,脚数为偶数");
return 0;
}
五、Python源码:
m = 0;n = 0;x = 0;y = 0
print("鸡兔同笼问题:")
print("请输入共有多少个头:")
m = int(input())
print("请输入共有多少只脚:")
n = int(input())
if n % 2 == 0:
y = n/2 - m
x = m - y
if x >= 0 and y >= 0:
print("一共有%d只鸡和%d只兔。"%(x,y))
else:print("输入不合理,无法得出结果")
else:print("输入错误,脚数为偶数。")
六、趣事闲聊:
上机课被老师嘲笑,解题还要列方程算,还不如小学生,4到10秒就能解出🤣
(上学上的,早就思维固化了,第一念想就是列方程)
老师直接说,“乘二除二,不就出来了吗?”
我直接满脸问号😂经过老师解释后,我懂了,兔子都抬两条腿,在地上的腿数就是2m。
(n-2m)再除以2,就得到了兔子的总数,继而求出 坤坤 的总数。
y = (n-2*m)/2; x = m-y;
经过两次提交给老师,老师都给出不合理的地方(都不健壮,输入数据后,存在负数情况,不符合实际情况;不合理时没给出提示😂)
最后加了两个 if 语句进行判断,并优化了算法(公式)
第一次写博客,喜欢的话,还请多多支持,只因你太美!!!