猜测比赛的结果
昨天看到这个问题,写了一个程序,不是太好,出现了三个解,唉...
/*
Name: score.cpp
Copyright:
Author: 胡中英
Date: 24-12-04 14:44
Description: 5个学生A, B, C, D, E参加某一项比赛。
甲,乙两人在猜测比赛的结果,甲猜的名次顺序为A, B, C, D, E,
结果没有猜中任何一个学生的名次,也没有猜中任何一对相邻名次
(所谓一对相邻名次,是指其中一对选手在名次上邻接。例如1与2,
或者2与3等)乙猜的名次顺序为D,A,E,C,B,结果猜中了两个学生的名次
并猜对了两对学生名次是相邻的。问比赛结果如何?
*/
#include <iostream>
#include <fstream>
#include <conio.h>
using namespace std;
/////////////////////////////////////////////////////
int count = 0;
ofstream file("out.txt",ios::out);
/////////////////////////////////////////////////////
void print(int A, int B, int C, int D, int E)
{
file << "A 是第: " << A << "\tB 是第: " << B << "\tC 是第: " << C << "\tD 是第: " << D << "\tE 是第: " << E << endl;
::count++;
}
int check(int A, int B, int C, int D, int E)
{
/////////////////////////////////////////////////////////////////////
if ( 1 == A && 2 == B && 3 == C && 4 == D && 5 == E )
{
return 0;
}
if ( 1 == (E - D) && 1 == (D - C) && 1 == (C - B) && 1 == (B - A) )
{
return 0;
}
if (1 == A || 2 == B || 3 == C || 4 == D || 5 == E)
{
return 0;
}
/////////////////////////////////////////////////////////////////////
if ( A == B || A == C || A == D || A == E || B == C || B == D || B == E || C == D || C == E )
{
return 0;
}
/////////////////////////////////////////////////////////////////////
if ( 1 == D && 2 == A && 3 != E && 4 != C && 5 != B)
{
print(A,B,C,D,E);
}
else if ( 2 == A && 3 == E && 1 != D && 4 != C && 5 != B)
{
print(A,B,C,D,E);
}
else if ( 3 == E && 4 == C && 1 != D && 2 != A && 5 != B)
{
print(A,B,C,D,E);
}
else if (4 == C && 5 == B && 1 != D && 2 != A && 3 != E)
{
print(A,B,C,D,E);
}
else if (1 == D && 2 != A && 3 == E && 4 != C && 5 != B)
{
print(A,B,C,D,E);
}
else if (1 == D && 2 != A && 3 != E && 4 == C && 5 != B)
{
print(A,B,C,D,E);
}
else if (1 == D && 2 != A && 3 != E && 4 != C && 5 == B)
{
print(A,B,C,D,E);
}
else if (1 != D && 2 == A && 3 != E && 4 == C && 5 != B)
{
print(A,B,C,D,E);
}
else if (1 != D && 2 == A && 3 != E && 4 != C && 5 == B)
{
print(A,B,C,D,E);
}
else if (1 != D && 2 != A && 3 == E && 4 != C && 5 == B)
{
print(A,B,C,D,E);
}
return 0;
}
/////////////////////////////////////////////////////
int main(void)
{
int A,B,C,D,E;
int isright = 1;
for ( D = 1; D <= 5; D++ )
for ( A = 1; A <= 5; A++ )
for ( E = 1; E <= 5; E++ )
for ( C = 1; C <= 5; C++ )
for ( B = 1; B <= 5; B++ )
{
if ( 1 == (A -D) && 1 == (E - A) && 1 != (C - E) && 1 != (B - C) )
{
isright = check( A,B,C,D,E );
}
else if ( 1 == (E - A) && 1 == (C - E) && 1 != (B - C) )
{
isright = check( A,B,C,D,E );
}
else if ( 1 == (C - E) && 1 == (B - C) )
{
isright = check( A,B,C,D,E );
}
else if ( 1 == (A -D) && 1 == (C - E) && 1 != (E - A) && 1 !=(B - C) )
{
isright = check( A,B,C,D,E );
}
else if ( 1 == (A - D) && 1 == (B - C) && 1 != (E - A) && 1 != (C - E) )
{
isright = check( A,B,C,D,E );
}
else if ( 1 == (E - A) && 1 == (B - C) && 1 != (A - D) && 1 != (C - E))
{
isright = check( A,B,C,D,E );
}
}
cout << "count = " << ::count << endl ;
getch();
file.close();
return 0;
}