标题:关于杭电1052田忌赛马的问题
只看楼主
不言葬月
Rank: 1
等 级:新手上路
帖 子:12
专家分:3
注 册:2010-7-22
结帖率:100%
已结贴  问题点数:20 回复次数:12 
关于杭电1052田忌赛马的问题
#include"stdio.h"
int main()
{
    int n;
    while(scanf("%d",&n)!=EOF)
    {
        if(n==0)break;
        int a[2][1024]={0,0},t,p,w,i,j;
        for(i=1;i<=n;i++)scanf("%d",&a[0][i]);
        for(i=1;i<=n;i++)scanf("%d",&a[1][i]);
        for(i=1;i<=n;i++)                            //排序田忌与国王的马的速度
        {
            for(j=1;j<=n-i;j++)
            {
                if(a[0][j]>a[0][j+1])
                {
                    t=a[0][j];
                    a[0][j]=a[0][j+1];
                    a[0][j+1]=t;
                }
                if(a[1][j]>a[1][j+1])
                {
                    t=a[1][j];
                    a[1][j]=a[1][j+1];
                    a[1][j+1]=t;
                }
            }
        }
        w=0;
        for(i=1,j=1;i<=n;i++)                        //用最小的的代价pk掉国王剩下的最差的马,记录胜利次数
        {
            if(a[0][i]>a[1][j])
            {
                a[0][i]=-9999;
                a[1][j]=9999;
                w++;
                j++;
            }
        }
        p=0;
        for(i=1,j=1;i<=n;i++)                //将剩下的可以平局的马平局,记录次数
        {
            for(j=1;j<=n;j++)
            {
                if(a[0][i]==a[1][j])
                {
                    a[0][i]=-9999;
                    a[1][j]=9999;
                    p++;
                    break;
                }
            }
        }
        printf("%d\n",(w-(n-w-p))*200);
    }
}
总是wa,求高手帮我一下啊~~~
搜索更多相关主题的帖子: 田忌 赛马 
2010-08-03 21:19
不言葬月
Rank: 1
等 级:新手上路
帖 子:12
专家分:3
注 册:2010-7-22
得分:0 
怎么沉下去了啊,自己顶一下~~
2010-08-04 08:16
linjx0123
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:279
专家分:1362
注 册:2006-4-7
得分:0 
肯定错误,比如
8 10
8 9
照你的算法,结果是0,事实上,8跟8比,10跟9比,结果为200
2010-08-04 15:03
LSYHEFENG
Rank: 2
等 级:论坛游民
帖 子:112
专家分:71
注 册:2010-7-17
得分:1 
这个我也清楚,但不知代码哪错了,要不版主帮忙找找
2010-08-04 15:21
linjx0123
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:279
专家分:1362
注 册:2006-4-7
得分:0 
算法错误
for(i=1,j=1;i<=n;i++)                        //用最小的的代价pk掉国王剩下的最差的马,记录胜利次数
        {
            if(a[0][i]>a[1][j])//当相等的情况呢。比如我举的例子,8跟8相等,不一定就跳过,比10跟8.10跟8是胜利了,但是8跟9就失败了。所以相等的情况还得特殊处理
            {
                a[0][i]=-9999;
                a[1][j]=9999;
                w++;
                j++;
            }
        }
2010-08-04 15:35
xmy_2002
Rank: 2
等 级:论坛游民
帖 子:4
专家分:14
注 册:2010-8-4
得分:6 
有个前提,田忌赛马的原则是经过排序后的马,在相同的序号上,田忌的马应该是不能优于王的马的,不然就不是寓言里的田忌赛马了,在这种情况下楼主的算法是正确的。
    如果没有这个前提,即出现了版主所举例子的情况的话,算法应该优化一下,“用最小的的代价pk掉国王剩下的最差的马,记录胜利次数”这个代码块应该实现“用最小的的代价pk掉国王的马,记录胜利次数”的功能,在版主的例子中,10应该去跟9比而不是8,具体的实现楼主自己再思考一下
2010-08-04 16:08
不言葬月
Rank: 1
等 级:新手上路
帖 子:12
专家分:3
注 册:2010-7-22
得分:0 
这个~~~具体的比较方法是怎样的啊~~我已经想不出来啦~~
2010-08-04 16:16
xmy_2002
Rank: 2
等 级:论坛游民
帖 子:4
专家分:14
注 册:2010-8-4
得分:3 
一个简单的方法是拿田忌马去和王的所有马比,选出最接近但小于田忌的马pk掉
2010-08-04 16:49
不言葬月
Rank: 1
等 级:新手上路
帖 子:12
专家分:3
注 册:2010-7-22
得分:0 
那平局的要怎么算呢??
2010-08-04 17:05
xmy_2002
Rank: 2
等 级:论坛游民
帖 子:4
专家分:14
注 册:2010-8-4
得分:0 
你后面的代码不是处理了吗?
2010-08-04 17:13



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-314751-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.092627 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved