您的位置:首页 > 其它

四大湖问题

2016-05-05 23:37 337 查看
我国有四大淡水湖。

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);
}
}
应付培训作业
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: