整理音乐

整理音乐

Time Limit: 1000MS Memory limit: 65536K

题目描述


请用链表完成下面题目要求。
xiaobai 很喜欢音乐,几年来一直在收集好听的专辑。他有个习惯,每次在听完一首音乐后会给这首音乐打分,而且会隔一段时间给打好分的音乐排一个名次。今天 xiaobai 打开自己的音乐文件夹,发现有很多不同时期打过分的排好序的子音乐文件夹,他想把这些音乐放到一块,组成一个分数有序的序列。由于音乐文件很多,而文件里音乐的数目也是不确定的,怎么帮帮 xiaobai 完成这件工作呢?
   

输入

输入数据第一行为一个整数n(n<1000),代表文件夹的数量。接下来是n个文件夹的信息,每个文件夹信息的第一行是一个数字m,代表这个文件夹里有m首歌,后面m行每行一个歌曲名、分数,之间用空格分开。

输出

输出一行,为所有音乐组成的一个序列,音乐只输出名字。

如果音乐分数相同则按照音乐名字典序进行排序。

示例输入

3
4
aaa 60
aab 50
aac 40
aad 30
2
kkk 60
kkd 59
3
qow 70
qwe 60
qqw 20

示例输出

qow aaa kkk qwe kkd aab aac aad qqw
 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 #include<string.h>
 4 struct vode
 5 {
 6     char f[10];
 7     int date;
 8     struct vode *next;
 9 };
10 int main()
11 {
12     struct vode *head,*tail,*p,*q;
13     head=(struct vode *)malloc(sizeof(struct vode ));
14     head->next=NULL;
15     tail=head;
16     char g[10];
17     int t;
18     int m,n;
19     scanf("%d",&m);
20     int i;
21     for(i=1;i<=m;i++)
22     {
23         scanf("%d",&n);
24         int j;
25         for(j=1;j<=n;j++)
26         {
27             p=(struct vode *)malloc(sizeof(struct vode ));
28             p->next=NULL;
29             scanf("%s%d",p->f,&p->date);
30             tail->next=p;
31             tail=p;
32         }
33     }
34     int k=0;
35     while(k=!k)
36     {
37         p=head->next;
38         q=p->next;
39         while(q)
40         {
41             if(strlen(p->f)<strlen(q->f))
42             {
43                strcpy(g,p->f);
44                strcpy(p->f,q->f);
45                strcpy(q->f,g);
46                t=p->date;
47                p->date=q->date;
48                q->date=t;
49                k=0;
50             }
51             else
52             {
53                 p=p->next;
54                 q=q->next;
55             }
56         }
57     }
58     k=0;
59     while(k=!k)
60     {
61         p=head->next;
62         q=p->next;
63         while(q)
64         {
65             if(p->date<q->date)
66             {
67                strcpy(g,p->f);
68                strcpy(p->f,q->f);
69                strcpy(q->f,g);
70                t=p->date;
71                p->date=q->date;
72                q->date=t;
73                k=0;
74             }
75             else
76             {
77                 p=p->next;
78                 q=q->next;
79             }
80         }
81     }
82     p=head->next;
83     int mn=0;
84     while(p)
85     {
86         if(mn==0)
87         {
88             printf("%s",p->f);
89             mn=1;
90         }
91         else
92         {
93             printf(" %s",p->f);
94         }
95         p=p->next;
96     }
97     return 0;
98 }
View Code
原文地址:https://www.cnblogs.com/kuangdaoyizhimei/p/3264617.html