问题:鸡兔同笼,输入鸡和兔的头的数量,输入鸡和兔的脚的数量,计算出多少只鸡和多少只兔。(注意,提示脚的数量不能是奇数,脚的数量不能少于头的数量的两倍,脚的数量不能大于头的数量的4倍)
公式:
兔的数量=(脚的数量-2*头的数量)/2
鸡的数量=头的数量-兔的数量
解题:
一、首先不考虑其他因素,单纯计算。
#include <iostream>
int main(int argc, char** argv) {
int head=0,foot=0;
printf("请输入头的数量:\n");
scanf("%d",&head);
printf("请输入脚的数量:\n");
scanf("%d",&foot);
int tu=0,ji=0;
tu=(foot-2*head)/2;
ji=head-tu;
printf("鸡的数量为%d,兔的数量为%d\n",ji,tu);
return 0;
}
运行结果:输入数据验证
二、发现问题,加上条件。
#include <iostream>
int main()
{
int head=0,foot=0;
printf("请输入头的数量:\n");
scanf("%d",&head);
printf("请输入脚的数量:\n");
scanf("%d",&foot);
if(foot%2==1)
{
printf("脚不能为单数!");
return 0;
}
if(foot<2*head)
{
printf("脚的数量不能少于头的数量的两倍!\n");
return 0;
}
if(foot>4*head)
{
printf("脚的数量不能多于头的数量的四倍!\n");
return 0;
}
int tu=0,ji=0;
tu=(foot-2*head)/2;
ji=head-tu;
printf("鸡的数量为%d,兔的数量为%d\n",ji,tu);
return 0;
}
输入数据验证运行结果:
三、发现问题:基本上解决所需,但是过程过于繁琐,输入数据错误要重新再来,考虑加入循环
#include <iostream>
#include<stdio.h>
int main()
{
int head=0,foot=0;
while(1) //死循环
{
printf("请输入头的数量:\n");
scanf("%d",&head);
printf("请输入脚的数量:\n");
scanf("%d",&foot);
if(foot%2==1)
{
printf("脚不能为单数!");
}
else if(foot<2*head)
{
printf("脚的数量不能少于头的数量的两倍!\n");
}
else if(foot>4*head)
{
printf("脚的数量不能多于头的数量的四倍!\n");
}
else
{
int tu=0,ji=0;
tu=(foot-2*head)/2;
ji=head-tu;
printf("鸡的数量为%d,兔的数量为%d\n",ji,tu);
break;
}
}
return 0;
}
运行结果:达到目的
最后思考是否重新输入的时候,如果单方面数据输错了,只需要改变单个数据呢?怎么运用双循环解决呢?有待提高。