解析:  排序题,关键技术:1.结构体变量记录数据

              2.加入可引用条件,如果已被引用就销毁变量。

 1 #include <stdio.h>
 2 #include <string.h>
 3 int main()
 4 {
 5     int n, i, j;
 6     struct woman{
 7         char city[80];
 8         char name[80];
 9         int num;
10     }a[2000], t;
11     scanf("%d", &n);
12     for(i = 0; i < n; i++){
13         scanf("%s ", a[i].city);
14         gets(a[i].name);
15         a[i].num = 1;
16     }
17     for(i = 0; i < n; i++){
18         if(a[i].num == 0)   /*不可引用*/
19             continue;
20         for(j = i + 1; j < n; j++)                
21             if(a[j].num && strcmp(a[i].city,a[j].city) == 0){
22                 if(strcmp(a[i].name,a[j].name) != 0)
23                     a[i].num++;
24                 a[j].num = 0;  /*销毁数据*/
25             }
26     }
27     for(i = 0; i < n; i++)
28         for(j = i + 1; j < n; j++)
29             if(strcmp(a[i].city,a[j].city) > 0){
30                 t = a[i];
31                 a[i] = a[j];
32                 a[j] = t;
33             }
34     for(i = 0; i < n; i++)
35         if(a[i].num)
36             printf("%s %d\n", a[i].city, a[i].num);
37     return 0;
38 }
39