#include<stdio.h> #include <stdlib.h> #include <string.h> #include <math.h> typedef struct Songlist{ char songname[100]; int second; int score; }songlist; int main() { double min,sec,flag; int songsum,listensum; songlist sl[105],tmp;int s; char listenname[100]; double sum,ratio; while(scanf("%d",&songsum)!=EOF&&songsum!=0){ s=0; for(int i=0;i<songsum;i++){ //输入初始歌单信息 scanf("%s",sl[s++].songname); getchar(); scanf("%lf:%lf",&min,&sec); sl[s-1].second=min*60+sec; sl[s-1].score=0; } scanf("%d",&listensum); for(int i=0;i<listensum;i++){//输入听歌时间 scanf("%s",listenname); getchar(); scanf("%lf:%lf",&min,&sec); for(int j=0;j<s;j++){ if(strcmp(listenname,sl[j].songname)==0){//找到歌单中当前听的歌,计算当次得分 sum=min*60+sec; sl[j].score+=5*sum/sl[j].second; break; } } } for(int i=s-1;i>0;i--){ flag=0; for(int j=0;j<i;j++){ if(sl[j].score<sl[j+1].score){//分数排序从大到小 tmp=sl[j]; sl[j]=sl[j+1]; sl[j+1]=tmp; flag=1; }else if(sl[j].score==sl[j+1].score){//遇到相同的分数 if(strcmp(sl[j].songname,sl[j+1].songname)>0){//按歌名字母排序 tmp=sl[j]; sl[j]=sl[j+1]; sl[j+1]=tmp; flag=1; } } } if(flag==0){ break; } } for(int i=0;i<s;i++){ printf("%s %d\n",sl[i].songname,sl[i].score); } } return 0; } |
Double click to view unformatted code.