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; }
相关文章推荐
- UVa:10420 - List of Conquests
- uva 10420 - List of Conquests
- UVa 10420 - List of Conquests
- UVA - 10420 List of Conquests
- UVa 10420 List of Conquests
- UVa 10420 - List of Conquests
- [算法练习] UVA 10420 - List of Conquests?
- uva 10420 List of Conquests
- UVA - 10420 - List of Conquests
- UVA10420-List of Conquests
- UVA 10420 - List of Conquests
- UVa 10420 - List of Conquests
- UVA 10420 List of Conquests
- UVA 10420 - List of Conquests
- uva 10420 - List of Conquests
- UVa10420 List of Conquests
- uva_10420-List of Conquests
- UVA 10420 - List of Conquests
- UVA10420 - List of Conquests
- UVa 10420 - List of Conquests