田忌赛马c语言程序设计,还是杭电1052田忌赛马
已結貼√
問題點數:20?回復次數:2
還是杭電1052田忌賽馬
//昨天那個算法漏洞挺大,但我重新構思了,但運行到312ms還是wa了。我測試了許多數據,結果是對的,郁悶了,誰能救救我啊?
#include"stdio.h"
void sort(int s[],int n,int d[])????????????????????//選擇排序
{
int i,j,t,k,e;
for(i=0;i
{
k=i;
for(j=i+1;j
if(s[k]
k=j;
if(k!=i)
{
t=s[i];
s[i]=s[k];
s[k]=t;
e=d[i];
d[i]=d[k];
d[k]=e;
}
}
}
int main()
{
void sort(int s[],int n,int d[]);
int i,j,k,n,e,m;
int a[1001]={0},b[1001]={0},c[1001]={3};????????//a用來存田忌馬的數據,b存齊王的,c用來記錄勝負平。
long sum;
while(scanf("%d",&n)!=EOF&&n!=0)
{
for(i=0;i
c[i]=3;
k=0;sum=0;e=0;
for(i=0;i
scanf("%d",&a[i]);
for(i=0;i
scanf("%d",&b[i]);
sort(a,n,c);????????????????????????????????//第一次進行排序。
sort(b,n,c);
for(i=0;i
{
if(a[i]>b[i])??????????????????????????? //贏了后c[i]=1,a[i]=-1,b[i]=-1,e用來記錄同一級別贏得馬的個數。
{
c[i]=1;
a[i]=-1;
b[i]=-1;
e++;
}
}
sort(a,n,c);????????????????????????????????//第二次排序,把那些贏得馬排到后面去。
sort(b,n,c);
for(i=0;i
{????????????????????????????????????????????//不能贏得我就盡量平。
m=0;
for(j=0;j
{
if(b[j]==-1)
continue;
if(a[i]>b[j])
{
c[i]=1;
b[j]=-1;
m=1;??????????????????????????? //這里m是,我贏了齊王得馬,就不必去平他的馬。
break;
}
}
for(j=0;j
{
if(m)
break;
if(b[j]==-1)
continue;
if(a[i]==b[j])
{
c[i]=0;
b[j]=-1;
break;
}
}
}
for(i=0;i
if(c[i]>1)
c[i]=-1;
for(i=0;i
{
if(c[i]==1)
sum+=200;
if(c[i]==-1)
sum-=200;
}
printf("%ld\n",sum);
}
return 0;
}
//我測試了許多數據,都是對的,但肯定有組過不了,應該哪里還有漏洞,歡迎各位大俠幫忙糾錯,或者發表你的看法,什么意見都歡迎。你也可以把好算法沾上去,互相討論,主要幫我看看哪錯了,我將不勝感激。
搜索更多相關主題的帖子:
賽馬 田忌
總結
以上是生活随笔為你收集整理的田忌赛马c语言程序设计,还是杭电1052田忌赛马的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 专业人士网址导航推广文案29句
- 下一篇: 无限猴子定理