合川区法院咨询电话:编程大侠请进

来源:百度文库 编辑:高校问答 时间:2024/04/25 16:36:37
5位跳水高手将参加10米高台跳水决赛,有好事者让人据实力预测比赛结果。
A选手说:B第一,我第二。
B选手说:我第二,E第四。
C选手说:我第一,D第二。
D选手说:C最后,我第三。
E选手说:我第四。A第一。
决赛成绩公布后,每位选手的预测都只说对了一半,即一对一错,请编程解出比赛的时间一名次。
太复杂了可以简单点吗?>

#include<stdio.h>

void main()
{
int a,b,c,d,e;
for(a=1;a<=5;a++)
for(b=1;b<=5;b++)
for(c=1;c<=5;c++)
for(d=1;d<=5;d++)
for(e=1;e<=5;e++)
{
if(a+b+c+d+e==(1+2+3+4+5) &&
(a==2)+(b==1)==1 &&
(b==2)+(e==4)==1 &&
(c==1)+(d==2)==1&&
(c==5)+(d==3)==1&&
(e==4)+(a==1)==1
)
{
printf("A=%d, B=%d, C=%d, D=%d, E=%d\n",a,b,c,d,e);
}
}
printf("\n");
}

两个答案:
A=2,B=5,C=1,D=3,E=4
A=3,B=1,C=5,D=2,E=4

可以用解 猜湖泊顺序的方法

注意:需要产生5!个数.
只需要把Order重新设置:
如A: 21xxx
B: x2x5x
C: 34xxx
...

#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<<"这个顺序是:";
for(int i=0;i<4;i++)
{
cout<<">"<<River[((int)temp[i]-49)];
}
cout<<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);
}