您的位置:首页 > 产品设计 > UI/UE

UVa 10420 - List of Conquests

2012-05-11 16:41 344 查看






做这道题目完全就是字符串的比较,包含的过程如下:

1:判断出现的国家在前面是否已经出现过,如果出现了,则要比较后面的人名是不是一样,如果一     样,就不用再计数了,不一样则要在s2中寻找该国家在对应的位置(a中)上+1。

2:如果没有出现  需要在s2 中曾加这个国家,并使对应的整形数组(a中)位置初始化为1.

3:对s2进行排序,在两个字符串进行对调的时候a中对应的位置也应对调。

#include <stdio.h>
#include <string.h>
int main()
{
int i,j,n,m,s,t,flag,key1,key2,k;
char s1[2000][100],s2[2000][100];
char s3[2000][100],s4[200];
int a[2000];
scanf("%d",&n);
for(i=0;i<=n-1;i++)
{
scanf("%s",s1[i]);
gets(s3[i]);
}
flag=0;
for(i=0;i<=n-1;i++)
{
key1=1;
key2=1;
for(j=0;j<=i-1;j++)
{
if(strcmp(s1[i],s1[j])==0)
{
key1=0;
if(strcmp(s3[i],s3[j])==0)
{
key2=0;
break;
}
}
}
if(key1==1)
{
strcpy(s2[flag],s1[i]);
a[flag]=1;
flag+=1;
}else
{
if(key2==1)
{
for(j=0;j<=flag-1;j++)
{
if(strcmp(s2[j],s1[i])==0)
{
break;
}
}
a[j]+=1;
}
}
}
for(i=0;i<=flag-2;i++)
{
k=i;
for(j=i+1;j<=flag-1;j++)
{
if(strcmp(s2[k],s2[j])>0)
{
k=j;
}
}
if(k!=i)
{
t=a[k];
a[k]=a[i];
a[i]=t;
strcpy(s4,s2[k]);
strcpy(s2[k],s2[i]);
strcpy(s2[i],s4);
}
}
for(i=0;i<=flag-1;i++)
{
printf("%s %d\n",s2[i],a[i]);
}
return 0;
}


 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  list