NOIP2011-普及组复赛模拟试题-第一题-NBA总冠军

题目背景 Background

一年两度的期末考要到来了!!
 题目描述 Description
  又要到考试了,Ljw决定放松一下,就打开电视,看见了篮球赛,他立即想到了每年的NBA总冠军队伍。由于复习紧张,他只记起了一部分,记忆的内容是正确的,可能不是按时间顺序排列的,记忆的内容可能有重复。
  现在请求学过编程的你帮助Ljw,按时间顺序输出总冠军的球队(不能重复)。
  (NBA从1947A.D到2009A.D)
 输入输出格式 Input/output
输入格式:
输入文件nba.in的第一行是一个整数n(0<n<50)。
接下来的n行,每行先是城市名(由大小写字母、空格组成),后是时间(由数字组成),二者之间用空格隔开。
输出格式:
输出文件nba.out共n行,即排序后的NBA总冠军队伍。每先是时间,后是城市名。
 输入输出样例 Sample input/output
样例测试点#1

输入样例(nba.in):

3

Boston 1963

Boston 1959

Philly 1947

输出样例(nba.out):

1947 Philly

1959 Boston

1963 Boston

思路:每次输入一个字符,判断是否为字母或者数字,分别存入字母或者数字函数,再排序一下输出就得了

代码如下:

 1 #include <stdio.h>
 2 #include <string.h>
 3 struct stu
 4 {
 5     char num[50];
 6     int score;
 7 };
 8 int main()
 9 {
10     int n,i,j,max=0,kk,flag,shuzi[100],aaaaa='a',ll=-1;
11     struct stu a[105],t;   
12     //freopen("nba.in","r",stdin);
13     //freopen("nba.out","w",stdout);    
14     scanf("%d",&n);
15     for(i=0;i<n;i++)
16     {
17         ll++;
18         max=0;
19         j=0;
20         scanf("%c",&aaaaa);
21         while(aaaaa!='\n')
22         {
23             
24             if(aaaaa>='0'&&aaaaa<='9')//是数字 
25             {
26                 shuzi[j]=aaaaa;
27                 j++;
28             }   
29             else //是字母 
30             {
31                 a[i].num[max]=aaaaa;
32                 max++;
33             }
34               scanf("%c",&aaaaa);
35         }
36         a[i].num[max]='\0';
37         a[ll].score=0;
38         for(kk=0;kk<j;kk++)//转化数字 
39         {
40             a[ll].score=a[ll].score*10+shuzi[kk]-'0';
41         }        
42     }   
43     for(i=1;i<n;i++)
44     {
45         flag=1;
46         for(j=0;j<n-i;j++)//排序 
47         {
48             if(a[j].score>a[j+1].score)
49             {
50                 flag=0;
51                 t=a[j];
52                 a[j]=a[j+1];
53                 a[j+1]=t;
54             }
55         }
56         if(flag) break; 
57     }
58     printf("\n");
59     for(i=0;i<n;i++)
60     {
61         if(a[i].score!=a[i+1].score||strcmp(a[i].num,a[i+1].num)!=0)
62         {
63             printf("%d %s\n",a[i].score,a[i].num);
64         }        
65     }    
66     return 0;
67 }

 

posted @ 2015-08-11 21:35  Memoryヾノ战心  阅读(1018)  评论(0编辑  收藏  举报