整理音樂
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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct node
{
int data;
char name[1000];
struct node *next;
};
int main()
{
struct node *head,*p,*q;
head=(struct node*)malloc(sizeof(struct node));
head->next=NULL;
char tp[1000];
int n,i,t,m,r;
scanf("%d",&m);
for(r=0;r<m;r++)
{
scanf("%d",&n);
getchar();
for(i=0;i<n;i++)
{
p=(struct node*)malloc(sizeof(struct node));
scanf("%s%d",p->name,&p->data);
p->next=head->next;
head->next=p;
}
}
for(p=head->next;p->next;p=p->next)
for(q=p->next;q;q=q->next)
if(p->data<q->data)
{
t=p->data;
p->data=q->data;
q->data=t;
strcpy(tp,p->name);
strcpy(p->name,q->name);
strcpy(q->name,tp);
}
for(p=head->next;p->next;p=p->next)
for(q=p->next;q;q=q->next)
if(p->data==q->data&&strcmp(p->name,q->name)>0)
{
t=p->data;
p->data=q->data;
q->data=t;
strcpy(tp,p->name);
strcpy(p->name,q->name);
strcpy(q->name,tp);
}
for(p=head->next;p;p=p->next)
{
if(p->next)printf("%s ",p->name);
else printf("%s",p->name);
}
return 0;
}