NOIP2011-普及组复赛模拟试题-第一题-NBA总冠军
题目背景 Background
一年两度的期末考要到来了!!
题目描述 Description
又要到考试了,Ljw决定放松一下,就打开电视,看见了篮球赛,他立即想到了每年的NBA总冠军队伍。由于复习紧张,他只记起了一部分,记忆的内容是正确的,可能不是按时间顺序排列的,记忆的内容可能有重复。
现在请求学过编程的你帮助Ljw,按时间顺序输出总冠军的球队(不能重复)。
(NBA从1947A.D到2009A.D)
输入输出格式 Input/output
输入格式:
输入文件nba.in的第一行是一个整数n(0<n<50)。
输入文件nba.in的第一行是一个整数n(0<n<50)。
接下来的n行,每行先是城市名(由大小写字母、空格组成),后是时间(由数字组成),二者之间用空格隔开。
输出格式:
输出文件nba.out共n行,即排序后的NBA总冠军队伍。每先是时间,后是城市名。
输出格式:
输出文件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 }
我不怕千万人阻挡,只怕自己投降…