田忌赛马这个故事大家都很熟悉了,我也就不再多做介绍了,反正就是要尽可能让赢得场数多一点。
我的思路如下:
先比较两方最快的马
(一)本方大于对方
直接用本方最快的马去干掉对方最快的马。
(二)本方小于等于对方
比较双方最慢的马
1 本方大于对方
直接用本方最慢的马去干掉对方最慢的马
2 本方小于等于对方
本方最慢的马与对方最快的马作比较(只可能是小于或等于)
(1)本方等于对方
打平
(2)本方小于对方
换子
重复以上步骤,直到全部比完。
AC代码如下:
//1052 #include<stdio.h> #include<algorithm> using namespace std; int main() { int n; while(scanf("%d",&n)!=EOF&&n) //马的数量 { int a[1001],b[1001],i,sum=0; 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); int bl=0,br=n-1,al=0,ar=n-1; //四个端点 //printf("%d\n",a[ar]); while(al<=ar) //终止条件 { if(a[ar]>b[br]) //最快斗最快 { sum+=200; ar--; br--; } else { if(a[al]>b[bl]) //最慢斗最慢 { sum+=200; al++; bl++; } else { if(a[al]==b[br]) //打平 { al++; br--; } else //换子 { sum-=200; al++; br--; } } } } printf("%d\n",sum); } return 0; }