33,311
社区成员
发帖
与我相关
我的任务
分享
// i^j,当i与j不同时返回1,就是异或运算。
// 5*5的循环,并保证 i~s 这 5 个数相互间两两不相同(第一
// 个if的条件里保证了这点),就可以得到 1~5 这 5 个数字的
// 任意顺序的排列,然后判断逐个判断排列是否使每一位选手的
// 说法都对一半,若是,那这个排列就是答案。
main( )
{int a,b,c,d;
for( a=1;a<=4;a++)
for( b=1;b<=4;b++)
if (a<>b)
for( c=1;c<=4;c++)
if (c<>a && c<>b)
{d=10-a-b-c;
if (d<>a && d<>b && d<>c )
if(((a==1)+(b==3))==1 && ((c==1)+(d==4))==1 && ((d==2)+(a==3))==1)
cout<< “a,b,c,d=”<<a<<b<<c<<d;
}
}
#include <iostream>
using std::cout;
using std::cin;
using std::endl;
int main(int argc, char *argv[])
{
int a[5];
enum {A,B,C,D,E};
int i,j,k,r,s;
for (i=1; i<6; ++i)
{
for (j=1; j<6;++j)
{
for (k=1; k<6; ++k)
{
for (r=1; r<6;++r)
{
for (s=1;s<6; ++s)
{
if( i^j && i^k && i^r && i^s && j^k
&& j^r && j^s && k^r && k^s)
{
a[A]=i; // A
a[B]=j; // B
a[C]=k; // C
a[D]=r; // D
a[E]=s; // E
if ( (a[B]==2)^(a[A]==3) //A说:B=2; A=3;√
&&(a[B]==2)^(a[E]==4) //B说:B=2; E=4;√
&&(a[C]==1)^(a[D]==2) //C说:C=1; D=2;√
&&(a[C]==5)^(a[D]==3) //D说:C=5;√ D=3;
&&(a[E]==4)^(a[A]==1)) //E说:E=4;√ A=1;
{
for (int in=0; in<5; ++in)
{
cout << a[in] << ' ';
}
cout << endl;
}
}
}
}
}
}
}
return 0;
}