正文

2005年8月22日第33期电脑报编程点将2005-09-09 23:54:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/xiangyu/4576.html

分享到:

2005年8月22日第33期电脑报编程点将 题目:某侦察队接到一项紧急任务,要求在A,B,C,D,E,F六个队员中尽可能多挑若干个人去完成任务,但有以下限制条件: (1)A和B两人中至少去一个; (2)A和D不能一起去; (3)A、E和F三人中要派两个人去; (4)B和C都去或者都不去; (5)C和D两人中去一个; (6)若D不去,则E也不去。 请用程序求出应该让哪几个人去? 我的分析和程序: /*用整数a,b,c,d,e,f来表示这六个人去或者不去,值为0代表不去,值为1代表去。用循环让这六个数可以取遍0和1, 当满足题目所要求的条件就显示出来,题目中的条件可以通过下面的来判断: (a||b)==1//条件(1) &&(a&&d)==0//条件(2) &&(((a&&e)==1&&f==0)||((a&&f)==1&&e==0)||((e&&f)==1&&a==0))//条件(3) &&(b==c)//条件(4) &&(c!=d)//条件(5) &&(e<=d))//条件(6) */ 初步程序:————这里没有考虑题目中的:尽可能多挑选若干个人去。也就是人应该尽量多 该程序在VC++6.0通过运行,结果:可以叫下面的人去:A  B  C  F #include<iostream> using namespace std; int AA[6]; char BB[]={'A','B','C','D','E','F'}; void main() {     int &a=AA[0],&b=AA[1],&c=AA[2],&d=AA[3],&e=AA[4],&f=AA[5];     int i;     for(a=0;a<2;a++)         for(b=0;b<2;b++)             for(c=0;c<2;c++)                 for(d=0;d<2;d++)                     for(e=0;e<2;e++)                         for(f=0;f<2;f++)                             if((a||b)==1&&(a&&d)==0&&                                 (((a&&e)==1&&f==0)||((a&&f)==1&&e==0)||((e&&f)==1&&a==0))                                 &&(b==c)&&(c!=d)&&(e<=d))                             {                                 cout<<"可以叫下面的人去:";                                 for(i=0;i<6;i++)                                     if(AA[i]==1)cout<<BB[i]<<"  ";                                 cout<<endl;                             } } 由上面的程序我们可以看出其实只有一种派选的可能,但是我们还是尽量来完善程序。 在下面这个程序中,我们把目前满足条件的最多的人暂时保存在CC[]数组里面,当遇到可以满足条件并且比现在具有更多人时我们 就更新CC[]数组。 #include<iostream> using namespace std; int AA[6]; char BB[]={'A','B','C','D','E','F'}; char CC[6]; void main() {     int &a=AA[0],&b=AA[1],&c=AA[2],&d=AA[3],&e=AA[4],&f=AA[5];     int i,j,temp=0;     for(a=0;a<2;a++)         for(b=0;b<2;b++)             for(c=0;c<2;c++)                 for(d=0;d<2;d++)                     for(e=0;e<2;e++)                         for(f=0;f<2;f++)                             if((a||b)==1&&(a&&d)==0&&                                 (((a&&e)==1&&f==0)||((a&&f)==1&&e==0)||((e&&f)==1&&a==0))                                 &&(b==c)&&(c!=d)&&(e<=d))                             {                                 for(i=0,j=0;i<6;i++)                                     if(AA[i]==1)j++;                                 if(temp<j)                                 {                                     temp=j;                                     for(i=0,j=0;i<6;i++)                                         if(AA[i]==1)CC[j++]=BB[i];                                     CC[j]='\0';                                 }                             }     cout<<"可以叫下面的人去:";     for(i=0;CC[i];i++)         cout<<CC[i]<<"  ";     cout<<endl; } 看完获奖程序后,我得到人家的一些条件的控制比我好(编程的基本思想和我相同),如下: (3)A、E和F三人中要派两个人去;:a+e+f==2; 获奖程序因字数限制没有帖出来,其下载地址是: www.cpcw.com/xz/33huojiang.rar

阅读(16324) | 评论(1)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

loading...
您需要登录后才能评论,请 登录 或者 注册