由乒乓球隊問題想到的

問題來源

  • 《C程序設計》 第6章 循環控制 6.15
  • 《C程序設計教程》 第5章 循環控制 5.15

問題描述

兩個乒乓球隊進行比賽,各出3個。甲隊爲 A、B、C 3人,乙隊爲 X、Y、Z 3人。已抽籤決定比賽名單。有人向隊員打聽比賽的名單,A說他不和X比,C說他不和X、Z比,請編程序找出3對賽手的名單。


  之所以拿這個題目來講,是因爲有些鬱悶——如此簡單的題目竟然耗費了我相當長的一段時間。

 

  咋看這道題目,腦子裏無非是窮舉、列表等想法……然後使用了兩層的for循環對每個隊員進行匹配,想草草了事,但可惜只窮舉出了一對一(one vs one)的所有可能。

 

顯然這不是題目所要求的。

做到這裏有點鬱悶,腦子裏開始浮想出數組、遞歸函數之類的概念……

然後開始搜索網絡上天花亂墜的答案,看到了各種各樣的解法,用到了各種各樣的知識點:數組、字符串……

最後還是被心裏一個尖銳的聲音喊住了——不對!!!雖然數組甚至遞歸函數這些東西的確是可以完成這道題目,但不應該是這樣子的!——因爲既然這道題目扔在這章的後面,顯然它不需要用到後面的那些知識。 ——既然如此,那就應該有隻依靠簡單的變量類型、邏輯語句以及本章主打的循環控制組成的解法就可以完成它!——但,到底是什麼呢?

……

於是在紙上列出了兩種形式的表

  ABC

011

110

110

上面這個表出現了和我一開始寫的算法一樣的結果——各個隊員可能的對手,但沒有得出一個整體的比賽次序。

然後我又嘗試做了另一種列表,並將不符合要求的組合去掉——於是答案出來了:

 ABC

 XYZ 

 XZY 

 YXZ 

 YZX 

 ZXY

 ZYX 

A的對手是Z,B的對手是X,C的對手是Y。而算法也顯而易見——窮舉出ABC(順序固定)對應對手的全部組合,再依題意判斷即可!


問題答案

忽然有一種做小學奧數題的感覺——用簡單的知識解決複雜的題——需要一條很清晰的思路……

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章