| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 426 人关注过本帖
标题:杭电1052田忌赛马,真心测不出到底哪错了。。求指导。
只看楼主 加入收藏
why1993514
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2012-3-27
结帖率:0
收藏
已结贴  问题点数:20 回复次数:3 
杭电1052田忌赛马,真心测不出到底哪错了。。求指导。
#include<stdio.h>
#define N 50
#define M 1000
void rank(int s[N],int n);
int main()
{
    int n[M],m,w=0,tian[M][N],king[M][N],i,j,k,d;
    scanf("%d",&n[1]);
    for(m=1;n[m]!=0;m++)
    {
        for(i=0;i<n[m];i++)
            scanf("%d",&tian[m][i]);
        for(i=0;i<n[m];i++)
            scanf("%d",&king[m][i]);
        rank(tian[m],n[m]);
        rank(king[m],n[m]);        
        scanf("%d",&n[m+1]);
    }    //以上完成了输入和降序排序
    for(k=1;k<m;k++)
    {
        for(i=0;i<n[k];i++)//从最强的开始比
        {
            if(tian[k][i]>king[k][i])//如果能赢,则赢,w表示赢的总数
                w++;
            else if(tian[k][i]<king[k][i])//如果当前的输了,则让最弱的当炮灰,并把当前数组全部后移一位
            {            
                w--;
                for(j=n[k]-1;j>i;j--)
                    tian[k][j]=tian[k][j-1];               
            }
            else if(tian[k][i]==king[k][i])//如果当前平局
            {
                if(tian[k][n[k]-1]<king[k][n[k]-1])//如果田忌最弱的一匹输给国王最弱的,则让最弱的当炮灰
                {
                    for(j=n[k]-1;j>i;j--)
                        tian[k][j]=tian[k][j-1];
                    w--;
                }
                else if(tian[k][n[k]-1]==king[k][n[k]-1])//如果最弱的和国王最弱的平局
                {
                    if(tian[k][n[k]-1]<tian[k][i])//如果最弱的比当前马弱,则让他炮灰,这样写是为了避免所有马能力一样的情况
                    {
                        w--;
                        for(j=n[k]-1;j>i;j--)
                            tian[k][j]=tian[k][j-1];
                    }
                }
                else
                {
                    for(d=n[k]-2;d>i;d--)//如果最弱的赢了国王最弱的,则继续从最弱的那个往前比
                        if(tian[k][d]<=king[k][d])
                            break;
                    if(d>i)//如果倒着比的过程中一旦出现比国王对应的马弱或者相等,则让最弱的炮灰
                        {
                            w--;
                            for(j=n[k]-1;j>i;j--)
                                tian[k][j]=tian[k][j-1];
                        }
                }
            }
        }
        printf("%d\n",w*200);
        w=0;
    }        
}
void rank(int s[N],int n)
{
    int i,j,t;
    for(i=0;i<n;i++)
        for(j=0;j<n-i-1;j++)
            if(s[j]<s[j+1])
            {
                t=s[j];
                s[j]=s[j+1];
                s[j+1]=t;
            }
}
搜索更多相关主题的帖子: king 1052 田忌赛马 include 
2012-03-27 23:45
czz5242199
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:4
帖 子:660
专家分:2400
注 册:2011-10-26
收藏
得分:10 
算法错了,这题可以用最大流算法或者匈牙利算法
2012-03-28 11:29
C_戴忠意
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:2
帖 子:575
专家分:1349
注 册:2011-10-21
收藏
得分:10 
看一看丶我最近也在做杭电的ACM

编程之路定要走完……
2012-03-28 11:33
why1993514
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2012-3-27
收藏
得分:0 
回复 2楼 czz5242199
麻烦能说说为什么这样就错了,那种情况过不了
2012-03-28 23:31
快速回复:杭电1052田忌赛马,真心测不出到底哪错了。。求指导。
数据加载中...
 
   



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

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