四大湖问题
2016-05-05 23:37
337 查看
我国有四大淡水湖。
A说:洞庭湖最大,洪泽湖最小,鄱阳湖第三。
B说:洪泽湖最大,洞庭湖最小,鄱阳湖第二,太湖第三。
C说:洪泽湖最小,洞庭湖第三。
D说:鄱阳湖最大,太湖最小,洪泽湖第二,洞庭湖第三。
4个人每个人仅答对一条,请从大到小输出四大湖的名称。
思路:
枚举法,每次用0到3,互斥的数来测试判句。
判句很好写。
每次找出0-3互斥的数,该怎么办?
其实问题就是0123,全排列去测试判句,字符串全排列很久以前写过,稍微写该一下。
A说:洞庭湖最大,洪泽湖最小,鄱阳湖第三。
B说:洪泽湖最大,洞庭湖最小,鄱阳湖第二,太湖第三。
C说:洪泽湖最小,洞庭湖第三。
D说:鄱阳湖最大,太湖最小,洪泽湖第二,洞庭湖第三。
4个人每个人仅答对一条,请从大到小输出四大湖的名称。
思路:
枚举法,每次用0到3,互斥的数来测试判句。
判句很好写。
每次找出0-3互斥的数,该怎么办?
其实问题就是0123,全排列去测试判句,字符串全排列很久以前写过,稍微写该一下。
//结果: Dt:2 Hz:0 Py:3 Th:1 void Permutation(char* pStr, char* pBegin) { if (*pBegin=='\0') { int Dt=pStr[0]-'0'; int Hz=pStr[1]-'0'; int Py=pStr[2]-'0'; int Th=pStr[3]-'0'; bool a=(((Dt==3)+(Hz==0)+(Py==1))==1); bool b=(((Hz==3)+(Dt==0)+(Py==2)+(Th==1))==1); bool c=(((Hz==0)+(Dt==1)==1)); bool d=(((Py==3)+(Th==0)+(Hz==2)+(Dt==1)==1)); if(a && b && c && d){ cout<<"洞庭:"<<Dt<<endl<<"洪泽:"<<Hz<<endl<<"鄱阳: "<<Py<<endl<<"太湖:"<<Th<<endl<<endl; } return ; } for (char *pch=pBegin; *pch!='\0'; pch++) { swap(*pch, *pBegin); Permutation(pStr, pBegin+1); swap(*pch, *pBegin); } }应付培训作业
相关文章推荐
- net WebApi中使用swagger
- Java中流的概念
- 管道与IO重定向之输出重定向
- Log
- 自定义控件 AnimationView 动画View
- 事务传播行为种类
- ARC 的实现
- javaEE SSH框架对象转json问题
- linux命令(21):more命令
- IIS7.5如何限制某UserAgent 禁止访问
- [javaSE] 网络编程(TCP,UDP,Socket特点)
- android 常用的adb命令
- hdu 2993 MAX Average Problem(斜率dp)
- PHP 创建缩略图
- 点圆柱类设计(3)
- 小代码
- I/O调优
- POJ 3320 Jessica's Reading Problem(尺取法)
- c++内存
- 汇编--INT 10H功能