田忌赛马

来源:互联网 发布:数据防泄密方案 编辑:程序博客网 时间:2024/05/16 07:40

田忌赛马

题目:

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

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

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

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

比赛的过程的就是如下:

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

原创粉丝点击