C语言实现小时候经常做的智力测试题

来源:本站
导读:目前正在解读《C语言实现小时候经常做的智力测试题》的相关信息,《C语言实现小时候经常做的智力测试题》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《C语言实现小时候经常做的智力测试题》的详细说明。
简介:下面的是两道面试题,小时候经常会看到这种类似的题目,但是用C语言实现,确实没那么容易想到,尤其是对我这种接触C语言仅仅一年的新人。

1、

5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果

A选手说:B第一,我第三。

B选手说:我第二,E第四。

C选手说:我第一,D第二。

D选手说:C最后,我第三。

E选手说:我第四,A第一。

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

#include<stdio.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 (((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))

{

printf("A:第%d名 B:第%d名 C:第%d名 D:第%d名 E:第%d名n",a,b,c,d,e);

}

}

}

}

}

}

system("pause");

return 0;

}

2、

日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个嫌疑犯的一个。以下为4个嫌疑犯的供词。

A说:不是我。

B说:是C。

C说:是D。

D说:C在胡说

已知3个人说了真话,1个人说的是假话。

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

#include<stdio.h>

int main()

{

int kill = 0;

for (kill = 'a'; kill <= 'd'; kill++)

{

if ((kill != 'a') + (kill == 'c') + (kill == 'd') + (kill != 'd') == 3)

{

printf("杀手是%cn",kill);

}

}

system("pause");

return 0;

}

看完之后,才发现并没有自己想的那么复杂。总是重复纠结一些问题,导致没有办法去想整体的方法。下面我就简单总结一下我解决这类实际问题的方法吧。

1、 让C语言解决实际问题,其实它是特别笨的,它不能够去分析逻辑找捷径(或者说我们还不会用它找捷径),所以 while 或 for 循环语句是必要的,它得把所有可能的情况一个一个列出来进行分析,看是否符合它的要求,再把符合要求的情况 printf 出来。

第一题,判断五个人的排名,那么输出结果必然是五个人,每个人的名次可能是1-5,那么就有25种情况,嵌套5个for循环语句可以实现这一功能。

第二题,需要判断谁是killer,很明显,程序只需要输入killer是谁就可以,也就是一个人,而其他的人就必然是无关人。因此,有4个嫌疑人,就需要4次循环,每次假设某一个人为killer,一次循环就可以做到列出谁是killer的所有情况。(由于四个人是abcd,所以定义了int型变量,从'a'到‘d’,字符型在内存里是以整型存储的。)

2、列出所有情况之后就要对所有情况进行判断, if 语句,判断是否满足条件。到了第二个难点,条件怎么写。

第一题,五个人,每个人说的都有一真一假,也就是说,一个人说两句话只有一句是真话,“A选手说:B第一,我第三。”两个条件分别是(b==1)(a==3),中间怎么连接呢?

&&:都为真,结果为1 ||:有一个为真结果就为1 而 !考虑多种可能的话程序又会很复杂。这里用先+再判断是否==1,(b==1)+(a==3)==1,两个条件只有一个为真是结果为真,要求五个人说的话都满足,所以五个语句之间用&&连接。只要用循环语句列出来的情况同时满足五个人说的话(只有一句话是真话),则这种情况符合题意,直接输出,然后再次判断下一种情况。

第二题,四个人说的话只有三个人是真的,计算量相当于只有第一题的五分之一,只要判断四个满足三个条件,第四个不满足就可以,而不用多个用&&再连接。

if ((kill != 'a') + (kill == 'c') + (kill == 'd') + (kill != 'd') == 3)四个人说的四种情况相加,结果等于三时,说明只满足三个条件,第四个不满足,当某一个嫌疑人是killer时 if 语句成立,则该嫌疑人确定为killer,输出。

提醒:《C语言实现小时候经常做的智力测试题》最后刷新时间 2024-03-14 01:02:04,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《C语言实现小时候经常做的智力测试题》该内容的真实性请自行鉴别。