c语言练习题(面试题)

来源:互联网 发布:js中单选按钮点击事件 编辑:程序博客网 时间:2024/05/21 07:05


5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果
A选手说:B第一,我第三。
B选手说:我第二,E第四。
C选手说:我第一,D第二。
D选手说:C最后,我第三。
E选手说:我第四,A第一。
比赛结束后,每位选手都说对了一半,请编程确定比赛的名次。

解析如下:

这道题的想法是这样子的,利用穷举的方法列出所有的情况,可以使用一种比较简单的思维去考虑这个问题,定义5个变量,使它本身的值就代表它的名次,用五层for循环,这样可以列出所有可能的情况,但是需要我们自己来判断还有哪些隐含的条件没有用到呢?

可以结合实际生活中的情况,名次不可能是不连续的,例如:名次不可能是(11245)其中没有第三名,这根本不现实,所以排除掉这些情况就可以了,


#pragma warning (disable : 4996)#include<stdio.h>#include<stdlib.h>int main(){int a = 1;int b = 1;int c = 1;int d = 1;int e = 1;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 (((b == 1) + (a == 3) == 1) && ((b == 2)+ (e == 4) == 1) && ((c == 1)+(d == 2) == 1)&& (( c== 5) + (d == 3) == 1)&& ((e == 4) + (a == 1) == 1)){int val = 0;int flag = 1;val |= 1<<(a - 1);val |= 1<<(b - 1);val |= 1<<(c - 1);val |= 1<<(d - 1);val |= 1<<(e - 1);//将1放置在(a.b.c.d.e)各自的名次上,//然后再将所有的值进行或运算while (val){if ((val % 2) == 0)//如果有不连续的,例如1 1 3 4 5,则排除这种可能{flag = 0;}val = val>>1;}if (flag != 0){printf("%d %d %d %d %d\n",a,b,c,d,e);}}system("pause");return 0;}






0 0
原创粉丝点击