田忌赛马

田忌赛马

题目:

在故事中的田忌赛马,让人都懂。

国王: 一等马,二等马, 三等马。

田忌: 一等马,二等马, 三等马。

同等级的马,是国王赢。不一样等级的马,就是看谁的等级高。

比赛的过程的就是如下:

国王    一等马   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;
}

posted @ 2017-05-18 22:52  让你一生残梦  阅读(337)  评论(0编辑  收藏  举报