[求帮忙简化]自己做出来了,但是感觉太啰嗦了..
新手自学C语言中..不知道有没有更好的方法实现这个程序
刚学到for循环..数组什么的还没学,只能用循环
程序代码:
/* 有 A, B, C, D, E 共5人参加考试,考试后这几个人对名次的猜测如下.
* A 认为: E一定是第一.
* B 认为: 我可能是第二.
* C 认为: A最差.
* D 认为: C一定不是第一.
* E 认为: D一定是第一.
*
* 已知,这几个人中考第一和第二的人猜测是正确的,且E不是第二也不是第三
* 问实际这几个人的名次.
*/
#include <stdio.h>
#define ZS 5
int main(void)
{
unsigned int a, b, c, d, e; //5个人的名次
unsigned int A, B, C, D, E; //5个人的判断
unsigned int he = 1 + 2 + 3 + 4 + 5;
for (a = 1; a <= ZS; a++)
for (b = 1; b <= ZS; b++)
for (c = 1; c <= ZS; c++)
for (d = 1; d <= ZS; d++)
for (e = 1; e <= ZS; e++)
{
if ((a + b + c + d + e == he) && \
(a != b && a != c && a != d && a != e) && \
(b != c && b != d && b != e) && \
(c != d && c != e) && \
(d != e) && \
e != 2 && e != 3)
{
A = e == 1;
B = b == 2;
C = a == 5;
D = c != 1;
E = d == 1;
if (A + B == 2 && C + D + E == 0 && a + b == 3)
{
printf("%u , %u , %u , %u , %u\n", A, B, C, D, E);
printf("%u , %u , %u , %u , %u\n", a, b, c, d, e);
}
else if (A + C == 2 && B + D + E == 0 && a + c == 3)
{
printf("%u , %u , %u , %u , %u\n", A, B, C, D, E);
printf("%u , %u , %u , %u , %u\n", a, b, c, d, e);
}
else if (A + D == 2 && B + C + E == 0 && a + d == 3)
{
printf("%u , %u , %u , %u , %u\n", A, B, C, D, E);
printf("%u , %u , %u , %u , %u\n", a, b, c, d, e);
}
else if (A + E == 2 && B + C + D == 0 && a + e == 3)
{
printf("%u , %u , %u , %u , %u\n", A, B, C, D, E);
printf("%u , %u , %u , %u , %u\n", a, b, c, d, e);
}
else if (B + C == 2 && A + D + E == 0 && b + c == 3)
{
printf("%u , %u , %u , %u , %u\n", A, B, C, D, E);
printf("%u , %u , %u , %u , %u\n", a, b, c, d, e);
}
else if (B + D == 2 && A + C + E == 0 && b + d == 3)
{
printf("%u , %u , %u , %u , %u\n", A, B, C, D, E);
printf("%u , %u , %u , %u , %u\n", a, b, c, d, e);
}
else if (B + E == 2 && A + C + D == 0 && b + e == 3)
{
printf("%u , %u , %u , %u , %u\n", A, B, C, D, E);
printf("%u , %u , %u , %u , %u\n", a, b, c, d, e);
}
else if (C + D == 2 && A + B + E == 0 && c + d == 3)
{
printf("%u , %u , %u , %u , %u\n", A, B, C, D, E);
printf("%u , %u , %u , %u , %u\n", a, b, c, d, e);
}
else if (C + E == 2 && A + B + D == 0 && c + e == 3)
{
printf("%u , %u , %u , %u , %u\n", A, B, C, D, E);
printf("%u , %u , %u , %u , %u\n", a, b, c, d, e);
}
else if (D + E == 2 && A + B + C == 0 && d + e == 3)
{
printf("%u , %u , %u , %u , %u\n", A, B, C, D, E);
printf("%u , %u , %u , %u , %u\n", a, b, c, d, e);
}
}
}
return 0;
}







