杭电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;
}
}