演算法實驗課回顧問題描述:
你一定聽說過田忌賽馬的故事吧?如果3匹馬變成n匹(n<=100),齊王仍然讓他的馬按照優到劣的順序初賽,田忌可以按任意順序選擇他的賽馬出賽。贏一局,田忌可以得到200兩銀子;輸一局,田忌就要輸掉200兩銀子。已知道國王和田忌的所有馬的奔跑速度,並且所有馬的奔跑速度均不相同,現已經對兩人的馬分別從快到慢排好序。請設計乙個演算法,幫助田忌贏得最多的銀子。
要求:
輸入:第一行乙個整數n,表示雙方各有n匹馬;
第二行n個整數分別表示田忌的n匹馬的速度;
第三行n個整數分別表示齊王的n匹馬的速度。
如果田忌最快的馬比齊王最快的馬快,則比之
如果田忌最快的馬比齊王最快的馬慢,則用田最慢的馬跟齊最快的馬比
// 這是貪心的第一步
如果田忌最快的馬的速度與齊威王最快的馬速度相等
如果田忌最慢的比齊威王最慢的快,則比之
// 這是貪心的第二步
如果田忌最慢的比齊威王最慢的慢,田忌慢vs齊王快
田忌最慢的與齊威王最慢的相等,田忌慢vs齊王快
#include
#include
using
namespace std;
// 快排
void
quick
(int a,
int begin,
int end)
a[i]
= t;
quick
(a, begin, i -1)
;quick
(a, i +
1, end);}
// 田忌賽馬演算法
inttianrac
(int tian,
int king,
int n)
// 田忌快馬比齊王快馬慢時,用最慢的馬跟他最快的比(埋伏他一手,這匹馬不用搶,他死定了,反手乙個超級加倍,悶聲發大財)
else
if(tian[tianh]
< king[kingh]
)// 田忌的快馬和齊王的快馬一樣快時(他也一樣快?不過不用怕,他的馬贏不了我)
else
// 田忌的慢馬比齊王的慢馬一樣快和慢時,就用慢馬和他快馬比(如果將這個慢馬換成快馬我的馬將絕殺,可惜換不得)
else}}
// 返回田忌贏的錢
return money;
}int
main()
cout <<
"王 馬之疾"
<< endl;
for(
int i =
0; i < n; i++
)// 排序,降序排
quick
(tian,
0, n-1)
;quick
(king,
0, n -1)
;// 呼叫「就算佛祖來了,田姥爺也難輸」函式
int result =
tianrac
(tian, king, n);if
(result >0)
else
if(result ==0)
else
return0;
}
測試資料:
95 92 80 85 98 86 81 83
88 89 97 99 82 85 90 91
80 79 90 95 78 85 68 91
95 92 99 85 98 86 85 96
結果截圖:
ps: 這個演算法對田姥爺太難輸了…
田忌賽馬貪心演算法 田忌賽馬問題 貪心演算法
關於輸入 輸入包含多組測試資料.每組測試資料的第一行是乙個整數n 1 n 1000 表示田忌和齊王都擁有n匹馬。接下來一行是n個整數,表示田忌的馬的速度,下一行也是n個整數,表示齊王的馬的速度。輸入的最後以乙個0表示結束。關於輸出 對每組資料,如果田忌能贏則輸出 win 如果田忌能輸則輸出 lose...
田忌賽馬貪心演算法 貪心演算法 田忌賽馬問題
題目描述 你一定聽過田忌賽馬的故事吧?如果3匹馬變成1000匹,齊王仍然讓他的馬按從優到劣的順序出賽,田忌可以按任意順序選擇他的賽馬出賽。贏一局,田忌可以得到200兩銀子,輸一局,田忌就要輸掉200兩銀子,平局的話不輸不贏。請問田忌最多能贏多少銀子?關於輸入 輸入包含多組測試資料.每組測試資料的第一...
田忌賽馬貪心演算法 貪心演算法解決田忌賽馬
田忌賽馬 對策問題 教學目標 1 通過簡單的事例,使學生初步體會對策論在解決.梁錦美有無課件 上課時間 有 12 月 15 日 1 田忌賽馬中的數學問題 課時.同學們,你聽過 田忌賽馬 的故事嗎?第一次賽馬 上 上 中 中 下 田忌 下齊.上課周次 十六 有無課件 上課時間 有 12 月 15 日 ...