程序设计实践与提高2 - 学习记录
2013-09-26 21:51
309 查看
![](https://oscdn.geek-share.com/Uploads/Images/Content/202008/30/c812fdede35e7ba7ba9040104293d14f.jpg)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202008/30/fb7f17b02a061510b339efee0073f335.jpg)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202008/30/02c028598d64a645de665f166a9920c2.jpg)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202008/30/c3e0ef4ad4ce738c7a44b793cce09d92.jpg)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202008/30/51873a0f9a7a671feb6535213414353f.jpg)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202008/30/012b3115ed334339b10a3c6b37a071ec.jpg)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202008/30/c10b4c390e75ff7389dba786811f86d9.jpg)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202008/30/2b5def6f68a23fb00fffd41bc6c54044.jpg)
【代码】 /* 例2.1 狱警发现一囚室的窗户栅栏被剪断了。该囚室有四个囚犯。 A说:不是我 B说:是C C说:是D D说:C胡说 已知三个人说真话,一个人说假话。请找出说谎的人。 先依次枚举假定某个人为说谎者,假定这个人说谎后,判断这种情况下4个人是否符合3个人说真话,1个人说假话。 如果符合条件,说明确定了说谎者,输出。 如果不符合条件,说明该说谎者的情况下不对,继续枚举。 */ #include <iostream> using namespace std; int main() { char lier='A'; for(;lier<='D';++lier){ //循环说谎者 //必须满足有3个说真话,1个说假话 int num=0; //说真话的人数 //已经假定一个人为说谎者了,枚举判断每个人说过的话的真值,统计说真话的和说假话的人数 if(lier!='A') ++num; if(lier=='C') ++num; if(lier=='D') ++num; if(lier!='D') ++num; //判断说真话的是不是3人,说假话的是不是1人 //如果符合,输出lier,跳出循环;如果不符合,继续循环 if(num==3) cout<<"Lier: "<<lier<<endl; } return 0; } 【输出结果】 Lier: C
![](https://oscdn.geek-share.com/Uploads/Images/Content/202008/30/b63aa3116c8af07ca1ca5ffc0e1cbf7e.jpg)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202008/30/725fbb1aa9a7bcd7560f2eea1a34456d.jpg)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202008/30/9c1b4d90bb45db011c2e579c639e4dab.jpg)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202008/30/69ed4acbae38d8ebd71431ba1b7f3d30.jpg)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202008/30/e6bbcd59176d60970cbd4ab586a1c6c4.jpg)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202008/30/e498e23dd66d0d6d48417ab3c535a946.jpg)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202008/30/fafd756e80caf6b56fd861a388998fb0.jpg)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202008/30/c9cb6814209c80b59972ccd8f377f265.jpg)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202008/30/de155a3e2872211fb0a2b3ce05e84773.jpg)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202008/30/7aa29a0270a548cba1beaf9ef0a710c1.jpg)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202008/30/8f80bfef2ea2ae76b86da12f73c14553.jpg)
【代码1】 /* 例2.1 有6个嫌疑人涉及一桩案件,现分析如下: (1)A,B至少有一人作案; //A||B (2)A,D不可能是同案犯; //!(A&&D) (3)A,E,F 3人中至少有2人作案; //A&&E || E&&F || A&&F (4)B,C 或同时作案,或与本案无关: //B&&C || !B&&!C 或者 B&&C (5)C,D中有且仅有1人作案; //(C||D) && !(C&&D) 或者 C&&!D ||!C&&D (6)如果 D 没有参与作案,则 E 也不可能参与作案。D || !D && !E 或者 D || !E 试编一程序,找出作案人。 */ #include <iostream> using namespace std; int main() { for(int A=0; A<=1; A++) for(int B=0; B<=1; B++) for(int C=0; C<=1; C++) for(int D=0; D<=1; D++) for(int E=0; E<=1; E++) for(int F=0; F<=1; F++){ if( (A||B) && (!(A&&D)) && (A&&E || E&&F || A&&F) && (B&&C) && (C&&!D ||!C&&D) && (D || !E) ){ 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"<<' '; if(!(A||B||C||D||E||F)) cout<<"null"<<' '; goto label; } } label: return 0; } 【输出结果】 A C E F 【代码2】 /* 例2.1_优化 改进程序不使用6重循环 有6个嫌疑人涉及一桩案件,现分析如下: (1)A,B至少有一人作案; //A||B (2)A,D不可能是同案犯; //!(A&&D) (3)A,E,F 3人中至少有2人作案; //A&&E || E&&F || A&&F (4)B,C 或同时作案,或与本案无关: //B&&C || !B&&!C 或者 B&&C (5)C,D中有且仅有1人作案; //(C||D) && !(C&&D) 或者 C&&!D ||!C&&D (6)如果 D 没有参与作案,则 E 也不可能参与作案。D || !D && !E 或者 D || !E 试编一程序,找出作案人。 */ #include <iostream> using namespace std; int main() { int A=1,B=1,C=1,D=1,E=1,F=1; for(int n=0;n<64;++n){ if(n%1==0) F=(F+1)%2; if(n%2==0) E=(E+1)%2; if(n%4==0) D=(D+1)%2; if(n%8==0) C=(C+1)%2; if(n%16==0) B=(B+1)%2; if(n%32==0) A=(A+1)%2; if( (A||B) && (!(A&&D)) && (A&&E || E&&F || A&&F) && (B&&C) && (C&&!D ||!C&&D) && (D || !E) ){ 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"<<' '; if(!(A||B||C||D||E||F)) cout<<"null"<<' '; break; } } return 0; } 【输出结果】 A C E F
![](https://oscdn.geek-share.com/Uploads/Images/Content/202008/30/5843feced9df18b688458c9f338c8cd7.jpg)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202008/30/8686f235f53fd56f33bb6b405ba775cf.jpg)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202008/30/3b9a131235d62528e2dc3089ea792493.jpg)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202008/30/ed7fc166d82ea267c74d1647c54194fa.jpg)
【代码】 /*【任务2.3】适用筛法求100以内的素数。 问题: 你会用什么方法求素数? 用到循环了吗?循环的次数? 用到数组了吗?数组里存的是什么? 什么是筛法?筛的什么?筛是什么? */ #include <iostream> using namespace std; int main() { int a[100]={0}; for(int i=2;i<100;i++){ int j; //把所有能被i整除的数筛去 for(j=i+1;j<100;j++){ if(a[j]==1) continue; if(j%i==0) a[j]=1; } //找寻下一个数,如果下一个数超过了99,则退出大循环 for(j=i+1;j<100;j++){ if(a[j]==0){ i=j; break; } } if(j>=100) break; --i; } //输出筛法求出的所有素数 for(int i=2;i<100;i++){ if(a[i]==0) cout<<i<<' '; } return 0; } 【输出结果】 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97
![](https://oscdn.geek-share.com/Uploads/Images/Content/202008/30/2ef994e942dd647eeb2c6c8529379a05.jpg)
Freecode : www.cnblogs.com/yym2013
相关文章推荐
- 程序设计实践与提高1 - 学习记录
- 程序设计实践与提高2 - 学习记录
- 程序设计实践与提高1 - 学习记录
- 【学习笔记】程序设计导引及在线实践 数值转换问题
- 【学习笔记】程序设计导引及在线实践 数值转换问题(2)
- C02-程序设计基础提高班(C++)学习安排
- C02-程序设计基础提高班(C++)学习安排
- 【java学习记录】3.采用面向对象的方法设计一个能对复数(Complex)进行加、减、乘法的简单运算的程序
- 【嵌入式系统学习记录】练习题:设计一个洗牌发牌的程序;(随机产生52个不同的数)
- STL程序设计实践四:简化输入和提高可维护性
- 程序设计实践——学习
- 系统级IO实践学习记录
- 设计模式学习之路 - 序言 - 记录自己的成长历程
- 微信小程序学习记录1-添加页面顺序
- 5、程序设计实践读书笔记
- C02-程序设计基础提高班(C++)第4周上机任务
- Hadoop学习全程记录——在Eclipse中运行第一个MapReduce程序
- 程序设计实践 双语版3.1---马尔可夫链算法
- Hibernate实践程序1——DB中增加一条记录
- 学习记录———.net内置类库Ping来实现ping程序