编程应用实现

来源:互联网 发布:淘宝卖家怎么用返利网 编辑:程序博客网 时间:2024/05/17 08:44
1)5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果 
A选手说:B第一,我第三。 
B选手说:我第二,E第四。 
C选手说:我第一,D第二。 
D选手说:C最后,我第三。 
E选手说:我第四,A第一。 

比赛结束后,每位选手都说对了一半,请编程确定比赛的名次。 


解题思路:

看到题我们确定总共有多少种可能,利用for循环。然后根据已知条件,每位选手都说对了一半,假设每个人说对了一半,把所有可能都用if语句罗列出来。

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
int main()
{
int a = 0;
int b = 0;
int c = 0;
int d = 0;
int e = 0;
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 == 3) && (b != 1)) || ((a != 3) && (b == 1)))
{
if (((b == 2) && (e != 4)) || ((b != 2) && (e == 4)))
{
if (((c == 1) && (d != 2)) || ((c != 1) && (d == 2)))
{
if (((c == 5) && (d != 3)) || ((c != 5) && (d == 3)))
{
if (((a == 1) && (e != 4)) || ((a != 1) && (e == 4)))
{
printf("a=%d\tb=%d\tc=%d\td=%d\te=%d\n", a, b, c, d, e);
}
}
}
}
}

}
}
}
}
}
system("pause");
return 0;
}
运行结果:

从运行结果中可看出一些组合虽符合条件,但是跳过了一些名次,例如21524缺少名次3,进行优化,代码如下:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
int main()
{
int a = 0;
int b = 0;
int c = 0;
int d = 0;
int e = 0;
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 == 3) && (b != 1)) || ((a != 3) && (b == 1)))
{
if (((b == 2) && (e != 4)) || ((b != 2) && (e == 4)))
{
if (((c == 1) && (d != 2)) || ((c != 1) && (d == 2)))
{
if (((c == 5) && (d != 3)) || ((c != 5) && (d == 3)))
{
if (((a == 1) && (e != 4)) || ((a != 1) && (e == 4)))
{

int ret = 0;//下面是用来判断输出的名次是否按照顺序,而不是没有那个比如11134缺少2
ret = ret | (1 << (a - 1));
ret = ret | (1 << (b - 1));
ret = ret | (1 << (c - 1));
ret = ret | (1 << (d - 1));
ret = ret | (1 << (e - 1));
if (ret == 1 || ret == 3 || ret == 7 || ret == 15 || ret == 31)
{
printf("a=%d\tb=%d\tc=%d\td=%d\te=%d\n", a, b, c, d, e);
}


}
}
}
}
}

}
}
}
}
}
system("pause");
return 0;
}

运行结果如下:



2)日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个嫌疑犯的一个。以下为4个嫌疑犯的供词。 
A说:不是我。 
B说:是C。 
C说:是D。 
D说:C在胡说。 
已知3个人说了真话,1个人说的是假话。 

现在请根据这些信息,写一个程序来确定到底谁是凶手。 

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
int main()
{
char killer = ' ';
for (killer = 'A'; killer <= 'D'; killer++)
{
if (((killer != 'A') + (killer != 'C') + (killer == 'D') + (killer != 'D')) == 3)//表示三人说话为真
{
printf("凶手是%c\n", killer);
break;
}
}
system("pause");
return 0;
}

运行结果:



原创粉丝点击