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

(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
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值