田忌赛马
田忌赛马
题目:
在故事中的田忌赛马,让人都懂。
国王: 一等马,二等马, 三等马。
田忌: 一等马,二等马, 三等马。
同等级的马,是国王赢。不一样等级的马,就是看谁的等级高。
比赛的过程的就是如下:
国王 一等马 pk 田忌 三等马。
国王 二等马 pk 田忌 一等马。
国王 三等马 pk 田忌 二等马。
现在要给你一些马,让你和国王的马,相比较。
输入:
一个n,表示多少各自匹马!之后第二行就是田忌的马的战斗值,第三行就是国王马的战斗值。
输出:
田忌赢国王的次数和输的次数之和。
解题思路:
(1)故事里面比赛的马,明显国王的马比田忌的马好。
(2)比赛拒绝平局,要把每一匹的马的作用发挥到最好,最值。
(3)比赛时,马比不过就取与国王的最好的马去比赛,从而去抵消掉过往最好的马。
代码如下:
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; int main() { int a[1000]; int n; int b[1000]; int i,s,j,e,sum; while(scanf("%d",&n)!=EOF) { if(n==0) break; for( i=0;i<n;i++) scanf("%d",&a[i]); for( i=0;i<n;i++) scanf("%d",&b[i]); sort(a,a+n); sort(b,b+n); i=s=0; //后面开始。 j=e=n-1; //前面开始 sum=0; while(i<=j) { if(a[i]>b[s]) //田忌最差的比国王最差的好,就赚了一场胜利。 { sum++; s++; i++; } else if(a[i]<b[s]) //田忌最差的比国王的最差的还差,就用最差的换掉国王最好的。 { sum--; e--; i++; } else { if(a[j]>b[e]) { sum++; e--; j--; } else { if(a[i]<b[e]) //用天田忌最差的去抵消国王的最好的 { sum--; e--; i++; } } } } printf("%d\n",sum); } return 0; }