百鸡问题以及借书方案知多少

百钱百鸡问题

一只公鸡值五钱,一只母鸡值三钱,三只小鸡值一钱,现在要用百钱买百鸡,请问公鸡,母鸡,小鸡各多少只

根据数学知识可以转化为方程组:

 

解题思路:根据鸡的数量不超过100只以及总价格不超过100,可以得出:公鸡数量为0-20,母鸡数量为0-33,小鸡数量为0-100。运用for循环嵌套实现公鸡,母鸡,小鸡分别取值后判断是否符合题干要求,符合则输出,不符合则继续执行循环(考虑小鸡chicken/3时为整数,要除以3.0以保证数据的准确)

代码实现:

#include<iostream>

#include<iomanip>

using namespace std;

int main()

{

    int cock,hen,chicken;

    for(cock=0;cock<21;cock++)//公鸡取值为0-20

    {

        for(hen=0;hen<34;hen++)//母鸡取值为0-33

        {

            for(chicken=0;chicken<101;chicken++)//小鸡取值为0-100

            {

                if((cock+hen+chicken==100)&&(5*cock+3*hen+chicken/3.0==100)) //判断是否符合题意中所得到的条件

                    cout<<"cock="<<setw(2)<<cock<<",hen="<<setw(2)<<hen<<",chicken="<<setw(2)<<chicken<<endl; //符合条件后输出所需要的各个数量

            }

        }

    }

    return 0;

}

拓展:上面方法循环嵌套三次,而chicken可以用hen和cock表示,减少一次循环,大大增加了计算机的效率

代码实现:

#include<iostream>

#include<iomanip>

using namespace std;

int main()

{

    int cock,hen,chicken;

    for(cock=0;cock<21;cock++)//公鸡取值0-20

    {

        for(hen=0;hen<34;hen++)//母鸡取值0-33

        {

            chicken=100-cock-hen;//减少一次循环,用公鸡和母鸡表示,增加效率

            if(5*cock+3*hen+chicken/3.0==100)//条件判断

                cout<<"cock="<<setw(2)<<cock<<",hen="<<setw(2)<<hen<<",chicken="<<setw(2)<<chicken<<endl;//符合条件则输出结果

        }

    }

    return 0;

}

该题体会:阅读完题目分析所需的变量以及变量所需要取的值,根据题干列出能想到的条件的简便表达形式,方便思考。再画出流程图,根据流程图写出代码。

 

 

借书方案知多少:

小明有5本新书,要借给A、B、C这3位小朋友,若每人每次只能借1本,则可以有多少种不同的借法?

解题思路:将五本书编号为1、2、3、4、5,每人只能借1本,则每人借到的书在该种借法中是无法重复的。只需先定义一个整形变量存储借法种数,三次循环结构嵌套后,条件判断三人所借的书是否相同,均不同则输出并且借法种数加一,相同则继续执行循环。

代码:

#include<iostream>

#include<iomanip>

using namespace std;

int main()

{

    int n=0;

    int h=0;

    int i,j,k;

    for(i=1;i<6;i++)//依次选出A的书

    {

        for(j=1;j<6;j++)//依次选出B的书

        {

            for(k=1;k<6;k++)//依次选出C的书

            {

                if(i!=j&&i!=k&&j!=k)//条件判断

                {

                 n++;//记录有效借阅方法的种数

                 cout<<"A: "<<i<<" B: "<<j<<" C: "<<k;

                 if(h==0||h==1)//按照规定的格式输出

                 {

                     h++;

                     cout<<"  ";

                 }

                 else

                 {

                     h=0;

                     cout<<endl;

                 }

                }

            }

        }

    }

    cout<<"共有"<<n<<"种有效借阅方法"<<endl;

    return 0;

}

拓展:

当A与B借的书相同时,C不管借的是什么书都不符合有效借阅方法,所以可以在C的循环当中加入判断条件,A借的书与B借的书不同,如果相同则不进行该次C的循环,可以提高效率

代码:

#include<iostream>

#include<iomanip>

using namespace std;

int main()

{

    int n=0;

    int h=0;

    int i,j,k;

    for(i=1;i<6;i++)//依次选出A的书

    {

        for(j=1;j<6;j++)//依次选出B的书

        {

            for(k=1;k<6&&i!=j;k++)//依次选出C的书,同时判断A,B书是否相同

            {

                if(i!=k&&j!=k)//条件判断

                {

                 n++;//记录有效借阅方法的种数

                 cout<<"A: "<<i<<" B: "<<j<<" C: "<<k;//按照规定输出结果

                 if(h==0||h==1||h==2)

                 {

                     h++;

                     cout<<"  ";

                 }

                 else

                 {

                     h=0;

                     cout<<endl;

                 }

                }

            }

        }

    }

    cout<<"共有"<<n<<"种有效借阅方法"<<endl;

    return 0;

}

该题体会:根据题干所要求的输出方式及时调整自己输出格式,多层循环嵌套中,如果内层的取值与外层的有关,可以先判断外层的取值,如果内层取值因为外层取值而不需要考虑,可以提高效率。

 

posted @   不如喝点  阅读(210)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示