整理音樂

整理音樂

Time Limit: 1000ms   Memory limit: 65536K  有疑問?點這裏^_^

題目描述


請用鏈表完成下面題目要求。
xiaobai
很喜歡音樂,幾年來一直在收集好聽的專輯。他有個習慣,每次在聽完一首音樂後會給這首音樂打分,而且會隔一段時間給打好分的音樂排一個名次。今天 xiaobai 打開自己的音樂文件夾,發現有很多不同時期打過分的排好序的子音樂文件夾,他想把這些音樂放到一塊,組成一個分數有序的序列。由於音樂文件很多,而文件裏音樂的數目也是不確定的,怎麼幫幫 xiaobai 完成這件工作呢?
   

輸入

輸入數據第一行爲一個整數nn<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;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章