Documents

鸡兔同笼 in C++


鸡兔同笼是著名的数学题,本程序将在c++中使用贪心算法和枚举算法写一个“鸡兔同笼”程序

#include <iostream>
#include <cmath>
#include <ctime>
#include <windows.h>
 
using namespace std;
 
int head,leg;                               //头和腿
int tmp;                                        //临时
int chicken,rabbit;                        //鸡和兔
int in;                                           //输入
 
void taxin(){                                   //贪心算法
    tmp=leg-(2*head);                   //使用假设发求鸡和兔的数量
    rabbit=tmp/2;
    chicken=head-rabbit;
}
 
void qiongju(){                               //穷举算法
    srand(time(0));                          //产生随机数
    if(head==leg/2){                     //如果头的数量是腿的2倍
        chicken=head;                     //那么鸡的数量就是头的数量(因为鸡有2条腿)
        rabbit=0;                              //兔子就是0个
    }
    else if(head==leg/4){              //如果头的数量是退的4倍
        chicken=0;                            //鸡就是0个
        rabbit=head;                        //兔的数量就是头的数量(因为兔有4条腿)
    }
    else{
        while(true){                            //重复执行
            chicken=rand() % 1000;      //鸡的数量在1000以内取随机数
            rabbit=rand() % 1000;        //兔的数量也在1000以内取随机数
            if((chicken*2+rabbit*4==leg)&&(chicken+rabbit==head)){ 
            //如果鸡乘2的数量加兔乘2的数量等于腿的数量(因为鸡有2条腿,兔有4条腿)且鸡的数量加兔的数量等于头的数量
                break;                            //跳出循环
            }
        }
    }
}
 
int main(){
    cout<<"头的数量+空格+腿的数量:";
    cin>>head>>leg;                      //输入头和腿
    cout<<"1.贪心算法 2.穷举算法:";
    cin>>in;
    if(in==1)
        taxin();
    if(in==2)
        qiongju();
    cout<<"\n鸡的数量:"<<chicken<<"\n";      //输出
    cout<<"兔的数量:"<<rabbit<<'\n';
    system("pause");                   //暂停
}