您的位置:首页 > 其它

第9周项目6-穷举法解决组合问题(6,7,8)

2014-10-28 18:12 337 查看
/*
* Copyright (c) 2014, 烟台大学计算机学院
* All rights reserved.
* 文件名称:test.cpp
* 作 者:刘畅
* 完成日期:2014年 10 月 28 日
* 版 本 号:v1.0
*
* 问题描述:用穷举法解决组合问题;
* 输入描述: 无输入;
* 程序输出:不造输出什么;
*/
(1)在右边的加法算式中(图略),不同的符号代表不同的数字,相同的符号代表相同的数字。请设计程序求出“都、要、学、C”4个符号分别代表的数字。
#include <iostream>
using namespace std;
int main()
{
    int a,b,c,d;
    for (a=1; a<=2; a++)
        for (b=0; b<=9; b++)
            for (c=0; c<=9; c++)
                for (d=0; d<=9; d++)
                    if (a*1000+b*100*2+c*10*3+d*4==2008&&(a-b)*(b-c)*(c-d)*(d-a)*(b-d)*(a-c)!=0)
                    {
                        cout<<"都:"<<a<<";"<<endl;
                        cout<<"要:"<<b<<";"<<endl;
                        cout<<"学:"<<c<<";"<<endl;
                        cout<<"C: "<<d<<";"<<endl;
                    }
    return 0;
}



运行结果:




(2)警察局抓住了A、B、C、D四名盗窃嫌疑犯,其中只有一人是小偷。在审问时,A说:“我不是小偷”;B说:“C是小偷”;C说:“小偷肯定是D”;D说:“C在冤枉好人”;。现在已经知道这四人中有三人说的是真话,一人说的是假话。请问到底谁是小偷?
#include <iostream>
using namespace std;
int main()
{
    int a,b,c,d;
    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+b+c+d==1&&(a==0)+(c==1)+(d==1)+(d==0)==3)
                    {
                        if (a==1) cout<<"A是小偷。";
                        if (b==1) cout<<"B是小偷。";
                        if (c==1) cout<<"C是小偷。";
                        if (d==1) cout<<"D是小偷。";
                    }
    return 0;
}



运行结果:





(3)有等式[жx(жx3+ж)]^2=8жж9;其中ж处为1个数字,滴上了墨水无法辨认。请编程找出ж表示哪个数字。
#include<iostream>
using namespace std;
int main()
{
    int a,b,c,d,e,f;
    for(a=0;a<=9;a++)
    {
        for(b=0;b<=9;b++)
        {
            for(c=0;c<=9;c++)
            {
                for(d=0;d<=9;d++)
                {
                    for(e=0;e<=9;e++)
                    {
                        f=a*(b*10+3+c);
                        if (f*f==8000+d*100+e*10+9)
                        {
                            cout<<"等式为:["<<a<<"×("<<b<<"3+"<<c<<")]^2=8"<<d<<e<<"9"<<endl;
                        }

                    }
                }
            }
        }
    }
    return 0;
}



运行结果:




(4)拓展:有等式[жx(жx3Oж)]^2=8жж9;其中ж处为1个数字,O处为+、-、*、/四个运算符号;滴上了墨水无法辨认。请编程找出ж表示哪个数字。O表示哪个运算符。(O处为+、-、*、/四个运算符之一)
#include<iostream>
using namespace std;
int main()
{   int a,b,c,d,e,f;
    for(a=0; a<=9; a++)
    {
        for(b=0; b<=9; b++)
        {
            for(c=0; c<=9; c++)
            {
                for(d=0; d<=9; d++)
                {
                    for(e=0; e<=9; e++)
                    {
                        f=a*(b*10+3+c);
                        if (f*f==8000+d*100+e*10+9)
                        {
                            cout<<"等式为:["<<a<<"×("<<b<<"3+"<<c<<")]^2=8"<<d<<e<<"9"<<endl;
                        }
                        f=a*(b*10+3-c);
                        if (f*f==8000+d*100+e*10+9)
                        {
                            cout<<"等式为:["<<a<<"×("<<b<<"3-"<<c<<")]^2=8"<<d<<e<<"9"<<endl;
                        }
                        f=a*((b*10+3)*c);
                        if (f*f==8000+d*100+e*10+9)
                        {
                            cout<<"等式为:["<<a<<"×("<<b<<"3*"<<c<<")]^2=8"<<d<<e<<"9"<<endl;
                        }
                        if(c!=0)
                        {
                            f=a*((b*10+3)/c);
                            if (f*f==8000+d*100+e*10+9)
                            {
                                cout<<"等式为:["<<a<<"×("<<b<<"3÷"<<c<<")]^2=8"<<d<<e<<"9"<<endl;
                            }
                        }
                    }
                }
            }
        }
    }
    return 0;
}



运行结果:





知识点总结:
穷举法赶脚就是需要强大的逻辑思维能力;这几个程序把逻辑理顺了,代码也就水到渠成了。


学习心得:
这一周的课后项目到这也就基本告一个段落了;这四个项目可谓是想了很久很久,别人都做完了很久了现在才做完;“都要学C”中题目少给了一个C导致我编写后不管怎么修改都没有结果,后来一问老师才知道是四个C相加555555;“谁是小偷”中自己陷入了误区,一直在考虑哪三个说的话是真的到底怎么写却忘了这是让程序自行判断。。。感觉自己逗了,好在班上有大神指点迷津很快就解决了;最后两个多重循环自己写的时候没有加那么多花括号,要么不显示结果,要么显示10*103+10==810109,再要么就把123456789每一个都从头显示到尾,最后借鉴了一下别人的才找了错误,补上花括号后在拓展中又在int和double上纠结上了,因为题目中带有/号,用double后也出现了几个错误的答案。。。这次完成项目可谓是一波三折啊,好在已经成功搞定这些,收获很大,继续加油!!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: