程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C >> 關於C >> C語言實現小時候經常做的智力測試題

C語言實現小時候經常做的智力測試題

編輯:關於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("殺手是%c\n",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,輸出。
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved