第9周上机实践项目6——穷举法解决组合问题(3~7)

来源:互联网 发布:国际贸易数据 编辑:程序博客网 时间:2024/05/02 04:27

(3)三色球问题

问题及代码

/* * Copyright (c) 2014, 烟台大学计算机学院 * All rights reserved. * 文件名称:test.cpp * 作    者:辛彬 * 完成日期:2014年 10 月 27 日 * 版 本 号:v1.0 * * 问题描述:一个口袋有3个红球,3个白球,6个黑球。取出8个球,求不同的颜色搭配。 * 输入描述:没有输入。 * 程序输出:方案。 */#include <iostream>using namespace std;int main(){    int i,j,m,count=0;    cout <<"红、白、黑球的个数为:\n";    for(i=0; i<=3; i++)        for(j=0; j<=3; j++)            for(m=0; m<=6; m++)                if(i+j+m==8)                {                    ++count;                    cout <<count<<":"<<" "<<i<<" "<<j<<" "<<m<<endl;                }    return 0;}


运行结果:

(4)委派任务

问题及代码

/* * Copyright (c) 2014, 烟台大学计算机学院 * All rights reserved. * 文件名称:test.cpp * 作    者:辛彬 * 完成日期:2014年 10 月 27 日 * 版 本 号:v1.0 * * 问题描述:要求在ABCDEF六个队员中选人执行任务,但有一些限制条件。 * 输入描述:没有输入。 * 程序输出:方案。 */#include <iostream>using namespace std;int main(){    int a,b,c,d,e,f;    cout <<"应该让以下这些人去:"<<endl;    for(a=0; a<=1; a++)        for(b=0; b<=1; b++)            for(c=0; c<=1; c++)                for(d=0; d<=1; d++)                    for(e=0; e<=1; e++)                        for(f=0; f<=1; f++)                            if(a+b>=1&&(a+d)!=2&&a+e+f==2&&(b+c==0||b+c==2)&&c+d==1&&(d+e==0||d==1))                            {                                if(a==1)                                    cout <<"A";                                if(b==1)                                    cout <<"B";                                if(c==1)                                    cout <<"C";                                if(d==1)                                    cout <<"D";                                if(e==1)                                    cout <<"E";                                if(f==1)                                    cout <<"F";                            }    return 0;}


运行结果:

(5)求加法式中符号代表的数

问题及代码

/* * Copyright (c) 2014, 烟台大学计算机学院 * All rights reserved. * 文件名称:test.cpp * 作    者:辛彬 * 完成日期:2014年 10 月 27 日 * 版 本 号:v1.0 * * 问题描述:求加法式中各个符号所代表的数字,不能重复。 *                        C *                     学 C *                  要 学 C *             + 都 要 学 C *             ———————————— *               2  0  0  8 * 输入描述:没有输入。 * 程序输出:方案。 */#include <iostream>using namespace std;int main(){    int idou,iyao,ixue,ic,icount=0;    for(idou=0; idou<=9; idou++)        for(iyao=0; iyao<=9; iyao++)            for(ixue=0; ixue<=9; ixue++)                for(ic=0; ic<=9; ic++)                    if(((idou-iyao)*(idou-ixue)*(idou-ic)*(iyao-ixue)*(iyao-ic)*(ixue-ic))!=0&&idou*1000+iyao*200+ixue*30+ic*4==2008)                    {                        ++icount;                        cout <<"方案"<<icount<<":"<<"都代表"<<idou<<" 要代表"<<iyao<<" 学代表"<<ixue<<" C代表"<<ic<<endl;                    }    return 0;}


运行结果:

(6)求谁是小偷

问题及代码

/* * Copyright (c) 2014, 烟台大学计算机学院 * All rights reserved. * 文件名称:test.cpp * 作    者:辛彬 * 完成日期:2014年 10 月 27 日 * 版 本 号:v1.0 * * 问题描述:A说自己不是小偷,B说C是小偷,C说D是小偷,D说自己不是小偷,求谁是小偷。 * 输入描述:没有输入。 * 程序输出:小偷。 */#include <iostream>using namespace std;int main(){    int a,b,c,d;    (a-b)*(a-c)*(a-d)*(b-c)*(b-d)*(c-d)!=0;    cout <<"求谁是小偷"<<endl;    for(a=0; a<=1; a++)        for(b=0; b<=1; b++)            for(c=0; c<=1; c++)                for(d=0; d<=1; d++)                {                    if(a==1&&c==1&&d==1&&d==0)                        cout <<"A是小偷";                    if(a==0&&c==0&&d==1&&d==0)                        cout <<"B是小偷";                    if(a==0&&c==1&&d==0&&b==0)                        cout <<"C是小偷";                    if(a==0&&c==1&&d==1&&d==0&&c==0)                        cout <<"D是小偷";                }    return 0;}


运行结果:

(7)求等式中的数字

问题及代码

/* * Copyright (c) 2014, 烟台大学计算机学院 * All rights reserved. * 文件名称:test.cpp * 作    者:辛彬 * 完成日期:2014年 10 月 28 日 * 版 本 号:v1.0 * * 问题描述:求等式[※×(※3+※)]的平方=8※※9中※依次所代表的数字。 * 输入描述:没有输入。 * 程序输出:方案。 */#include <iostream>using namespace std;int main(){    int a,b,c,d,e;    cout <<"求等式[※×(※3+※)]的平方=8※※9中※依次所代表的数字"<<endl;    cout <<"依次所代表的数字为"<<endl;    for(a=1; a<=9; a++)        for(b=1; b<=9; b++)        for(c=1; c<=9; c++)        for(d=1; d<=9; d++)        for(e=1; e<=9; e++)        if((a*(b*10+3+c))*(a*(b*10+3+c))==8*1000+d*100+e*10+9)        {            cout <<a<<" "<<b<<" "<<c<<" "<<d<<" "<<e;        }    return 0;}

运行结果

(7)拓展:求等式中的数字及运算符

问题及代码

/* * Copyright (c) 2014, 烟台大学计算机学院 * All rights reserved. * 文件名称:test.cpp * 作    者:辛彬 * 完成日期:2014年 10 月 27 日 * 版 本 号:v1.0 * * 问题描述:求等式[※×(※3○※)]的平方=8※※9中※依次所代表的数字,○所代表的运算符。 * 输入描述:没有输入。 * 程序输出:方案。 */#include <iostream>using namespace std;int main(){    int a,b,c,d,e;    cout <<"求等式[※×(※3○※)]的平方=8※※9中※依次所代表的数字,○所代表的运算符"<<endl;    cout <<"依次所代表的数字为"<<endl;    for(a=1; a<=9; a++)        for(b=1; b<=9; b++)        for(c=1; c<=9; c++)        for(d=1; d<=9; d++)        for(e=1; e<=9; e++)        if((a*(b*10+3+c))*(a*(b*10+3+c))==8*1000+d*100+e*10+9)        {            cout <<a<<" "<<b<<" "<<c<<" "<<d<<" "<<e<<endl;            cout <<"运算符是加号";        }        if((a*(b*10-3+c))*(a*(b*10-3+c))==8*1000+d*100+e*10+9)        {            cout <<a<<" "<<b<<" "<<c<<" "<<d<<" "<<e<<endl;            cout <<"运算符是减号";        }        if((a*((b*10-3)*c))*(a*((b*10-3)*c))==8*1000+d*100+e*10+9)        {            cout <<a<<" "<<b<<" "<<c<<" "<<d<<" "<<e<<endl;            cout <<"运算符是乘号";        }        if((a*((b*10-3)/c))*(a*((b*10-3)/c))==8*1000+d*100+e*10+9)        {            cout <<a<<" "<<b<<" "<<c<<" "<<d<<" "<<e<<endl;            cout <<"运算符是除号";        }    return 0;}

运行结果:

学习感悟:除了倒数第二个的解法我不太明白外,其余的感觉还行。。。。。精简一下或许更好

0 0
原创粉丝点击