编程基础-----田忌赛马

贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局部最优解。贪心算法不是对所有问题都能得到整体最优解,但对范围相当广泛的许多问题他能产生整体最优解或者是整体最优解的近似解。

 

给定齐王与田忌的赛马各n匹怎么排顺序才能让田忌胜率更大呢?


首先对齐王与田忌的赛马分别进行由大到小的排序,分出马的等级来。

开始比赛:
把齐王的最差的马同田忌最差的马比较,结果有三种情况:
1、田忌的马更快:比,田忌加分;
2、齐王的马更快:让田忌的这匹马同齐王最快的马比,输也要拉一个最好的;
3、打成平手,这时再如下比:

齐王最快的马与田忌最快的马比较,还是三种情况:
1)田忌的马快,就让它把齐王最快的马比下去;
2)齐王马快田忌就用刚才打平手的劣马同齐王最好的马比,输也要拉一个最好的;

 

3)平手则让田忌的最慢的马同齐王最快的马比。

 

 

 

#include<stdio.h>
void qsort(int *a,int l,int r)
{
    int x=a[l],i=l,j=r;
    if(l>=r)return ;
    while(i<j)
    {
        while(i<j&&a[j]<=x)j--;
        a[i]=a[j];
        while(i<j&&a[i]>=x)i++;
        a[j]=a[i];
    }
    a[i]=x;
    qsort(a,l,i-1);
    qsort(a,i+1,r);
}
int main()
{
    int n,i,tian[1001],wang[1001],la,lb,ra,rb;
    int count;
    while(scanf("%d",&n)!=EOF,n)
    {
        count=0;
        for(i=0;i<n;i++)
            scanf("%d",&tian[i]);
        for(i=0;i<n;i++)
            scanf("%d",&wang[i]);
        qsort(tian,0,n-1);
        qsort(wang,0,n-1);
        la=lb=0;ra=rb=n-1;
        while(la<=ra)
        {
            if(tian[ra]<wang[rb]){count--;lb++;ra--;}
            else if(tian[ra]>wang[rb]){count++;ra--;rb--;}
            else if(tian[la]>wang[lb]){count++;la++;lb++;}
            else {if(wang[lb]>tian[ra]){ra--;lb++;count--;}
                  else {ra--;lb++;}}
        }
        printf("%d\n",count*200);
    }
    return 0;
}

 

 

 

 

 

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值