田忌賽馬,大致題意是田忌和國王賽馬,贏一局得200元,輸一局輸掉200元,平局則財產不動。
先輸入一個整數N,接下來一行是田忌的N匹馬,下一行是國王的N匹馬。當N為0時結束。
此題為貪心算法解答,有兩種思路。
思路二:
1、開始也是先排序,可以使用sort快排;
2、然后將田忌最大的馬與國王進行比較;
3、如果田忌最大的馬大於國王,那么就勝場++;
4、如果田忌最大的馬小於國王,那么就一定會輸,所以用田忌最小的馬輸給國王最大的馬;
5、如果田忌最大的馬等於國王,那么就比較最小的馬;
5。1、如果田忌最小的馬大於國王,那么勝場++;
5。2、如果田忌最小的馬小於國王,那么就輸給國王;
5。3、如果田忌最小的馬等於國王,就用田忌最小的馬對國王最大的馬,如果國王最大的馬大,那么財產要減200;
const int Max = 1050; bool cmp(int a,int b) { return a > b; } int pk2() { int tian[Max],king[Max]; int i,j,n,m; while(cin >> n) { if(n == 0) break; for(i=1; i<=n; i++) { cin >> tian[i]; } for(i=1; i<=n; i++) { cin >> king[i]; } sort(tian+1,tian+1+n,cmp); sort(king+1,king+1+n,cmp); int ans = 0; int ii,jj; for(i=1, j=1, ii=n, jj=n; i<=ii; ) { if(tian[i] > king[j]) { ans += 100; i++,j++; } else if(tian[i] < king[j]) { ans -= 100; j++,ii--; } else { if(tian[ii] > king[jj]) { ans += 100; ii--,jj--; } else { if(tian[ii] < king[j]) ans -= 100; ii--,j++; } } } cout << ans << endl; } return 0; } int main() { pk2(); return 0; }
參考:
http://blog.163.com/zhaoyuan_sue/blog/static/20868323120125280842774/