南华大学
计算机科学与技术学院
实 验 报 告
( 2011~2012 学年度 第 二 学期 )
课程名称
实验名称
姓名 tengzi
学号 20104030527
算法设计与分析
专业 电气信息类
班级 5班
地点 8—209
教师 余颖
实验二 蛮力法
一、 实验目的与要求
熟悉C/C++语言的集成开发环境; 通过本实验加深对蛮力法的理解。
二、 实验内容:
掌握蛮力法的概念和基本思想,并结合具体的问题学习如何用相应策略进行求解的方法。
三、 实验题
1. 某地刑侦大队对涉及六个嫌疑人的一桩疑案进行分析:(1)A、B至少有一人作案;(2)A、E、F三人中至少有两人参与作案;(3)A、D不可能是同案犯;(4)B、C或同时作案,或与本案无关;(5)C、D中有且仅有一人作案;(6)如果D没有参与作案,则E也不可能参与作案。试设计算法将作案人找出来。 2.
将1,2...9共9个数分成三组,分别组成三个三位数,且使这三个三位数构成1:2:3的
比例,试求出所有满足条件的三个三位数。
四、 实验步骤
理解算法思想和问题要求; 编程实现题目要求;
上机输入和调试自己所编的程序; 验证分析实验结果; 整理出实验报告。
五、 实验程序 1.犯罪问题
#include using namespace std; int main() { int A,B,C,D,E,F; 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 > 0 )&& (A+E+F >1)&& (A+D == 1)&& (B+C != 1)&& (C+D == 1 ) && (!(!D && cout<<\"A\"<<( A==1?\"作案\":\"非作案\" ); cout<<\"\\nB\"<<( B==1?\"作案\":\"非作案\" ); cout<<\"\\nC\"<<( C==1?\"作案\":\"非作案\" ); cout<<\"\\nD\"<<( D==1?\"作案\":\"非作案\" ); cout<<\"\\nE\"<<( E==1?\"作案\":\"非作案\" ); cout<<\"\\nF\"<<( F==1?\"作案\":\"非作案\" )< } } return 0;} //============================== 2.9数问题 #include int check(int t1,int t2,int t3); void main(){ int x,num=0; for(x=123;x<987/3;x++) if(check(x,2*x,3*x)) cout<<++num<<\": \"< long a1=t1%10+t1/10%10+t1/100%10; long b1=t2%10+t2/10%10+t2/100%10; long c1=t3%10+t3/10%10+t3/100%10; long a2=(t1%10)*(t1/10%10)*(t1/100%10); long b2=(t2%10)*(t2/10%10)*(t2/100%10); long c2=(t3%10)*(t3/10%10)*(t3/100%10); if(((a1+b1+c1)==temp1) && (a2*b2*c2==temp2)) lRc=1; else lRc=0; return lRc; } 实验结果 1.犯罪问题 2.9数问题 六、 实验分析 (1)理论上,蛮力法可以解决可计算领域的各种问题。 (2)蛮力法经常用来解决一些较小规模的问题。 (3)对于一些重要的问题(例如排序、查找、字符串匹配) ,蛮力法 可以产 生一些合理的算法,他们具备一些实用价值,而且不受问题规模的限制。 (4)蛮力法可以作为某类时间性能的底限,来衡量同样问题的更高效算 法。 因篇幅问题不能全部显示,请点此查看更多更全内容