UVA 10420

http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=24&page=show_problem&problem=1361

这题是关于旅游点的名胜清单,输入国家名和景点,计算各个国家的景点数,保留不重复的,重复的就在原来的基础上加上一,最后输出时注意按字典序输出

#include<stdio.h>
#include<string.h>
struct country{
               char name[100];
               int sum;
              };//定义结构体记录国家和国家出现的次数
int main()
{
 int n,i,j,len=0;
 char str[76],na[76];
 struct country gj[2000],temp;
 while(scanf("%d",&n)!=EOF)
      {
       gets(str);
       for(i=0;i<2000;i++)
           {
            gj[i].sum=0;
            gj[i].name[0]=0;
           } 
       len=0;      //初始化,len记录国家个数
       while(n--)
         {
           gets(str);
           for(i=0;str[i]!=' ';i++)
              na[i]=str[i];
              na[i]='\0';//只留下国家的名字
           for(i=0;i<len;i++)
              {
               if(strcmp(gj[i].name,na)==0)
                {
                 gj[i].sum++;
                 break;
                }
               }
           if(i==len)
             {
              strcpy(gj[i].name,na);
              gj[i].sum++;
              len++;
             }//如重复出现,则加一,若新的国家名,则建立一个,并次数加一
         } 
        for(j=1;j<len;j++)
           for(i=0;i<len-j;i++)
              if(strcmp(gj[i].name,gj[i+1].name)>0)
                {
                 temp=gj[i];
                 gj[i]=gj[i+1];
                 gj[i+1]=temp;
                }     //按alphabetical order即字母顺序排序
        for(i=0;i<len;i++)
           printf("%s %d\n",gj[i].name,gj[i].sum);
      }
 return 0;
}

 

 

posted @ 2013-02-19 09:24  执着追求的IT小小鸟  阅读(123)  评论(0编辑  收藏  举报