广东省环境保护局:编程王子进

来源:百度文库 编辑:查人人中国名人网 时间:2024/05/08 04:51:03
我国有4大淡水湖。
A说:洞庭湖最大,洪泽最小。鄱阳湖第三。
B说:洪泽湖最大,洞庭湖最小,鄱阳湖第二。太湖第三。
C说:洪泽湖最小,洞庭湖第三。
D说:鄱阳湖最大,太湖最小,洪泽湖第二,洞庭湖第三。
4个人每人仅答对了一个,请你编程给出4个湖从大到小的顺序。
能不能简单点啊

/*
编程王子进
悬赏分:0 - 离问题结束还有 14 天 8 小时
我国有4大淡水湖。
A说:洞庭湖最大,洪泽最小。鄱阳湖第三。
B说:洪泽湖最大,洞庭湖最小,鄱阳湖第二。太湖第三。
C说:洪泽湖最小,洞庭湖第三。
D说:鄱阳湖最大,太湖最小,洪泽湖第二,洞庭湖第三。
4个人每人仅答对了一个,请你编程给出4个湖从大到小的顺序。

*/

#include<stdio.h>

void main()
{
int dong,hong,pan,tai;
for(dong=1;dong<=4;dong++)
for(hong=1;hong<=4;hong++)
for(pan=1;pan<=4;pan++)
for(tai=1;tai<=4;tai++)
{
if(
(dong!=hong && dong!=pan && dong!=tai
&& hong!=pan && hong!=tai && pan!=tai) &&

((dong==1)+(hong==4)+(pan==3))==1 &&
((hong==1)+(dong==4)+(pan==2)+(tai==3))==1 &&
((hong==4)+(dong==3))==1 &&
((pan==1)+(tai==4)+(hong==2)+(dong==3))==1

&& dong+hong+pan+tai==(1+2+3+4)
)
{
printf("dong_ting=%d, hong_ze=%d, pan_yang=%d, tai_hu=%d\n",
dong,hong,pan,tai);
}
}
printf("\n");
}

输出:
dong_ting=2, hong_ze=4, pan_yang=1, tai_hu=3
后面的数字就是它们的排名

#include<iostream.h>
#include<conio.h>
//---------------------------------------------------------------------------

#pragma argsused
char * myswap(int index);
bool IsCorrect(char *x,char *y);

int main(int argc, char* argv[])
{
char *River[]={"洞庭湖","洪泽","鄱阳湖","太湖"};
//A,B,C,D的猜测结果记录分别按1,2,3,4来记录
// 3142
char *Order[4]={"1x32","2341","xx12","3214"};
char *temp;
bool Answerd=false;
for(int k=0;k<24;k++)
{

temp=myswap(k);
for(int i=0;i<4;i++)
{
if(IsCorrect(Order[i],temp))
{
Answerd=true;
}
else
{
Answerd=false;
break;
}
}
if(Answerd)
{
break;
}
}
if(!Answerd)
{
cout<<"不能算出答案!!"<<endl;
getch();
return 0;
}
cout<<"这个顺序是:"<<endl;
for(int i=0;i<4;i++)
{
cout<<River[((int)temp[i]-49)]<<endl;
}

getch();
return 0;
}
//---------------------------------------------------------------------------
char * myswap(int index)
{
//---产生阶乘数组的算法还没有想到------------
char *x[24]={"1234","1243","1342","1324","1423","1432",
"2134","2143","2314","2341","2413","2341",
"3124","3142","3214","3241","3412","3421",
"4123","4132","4213","4231","4321","4312"};
if(index<0||index>=24)
return NULL;
else
return x[index];
// 1234 1243 1342 1324 1423 1432

}

bool IsCorrect(char *x,char *y)
{
bool ishave=false;//is none.
bool onlyone=true; //is only one?

for(int j=0;j<4;j++)
{
if(x[j]==y[j])
{
if(ishave)
{
onlyone=false;
return false;
}
else
ishave=true;
}
}
return (ishave&&onlyone);
}

运算结果:
(按大到小)
鄱阳湖
洞庭湖
太湖
洪泽

for a = 1 to 4
for b = 1 to 4
if a<>b then
for c=1 to 4
if(c<>a)and (c<>b) then
d=10-a-b-c
...........