| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 677 人关注过本帖
标题:wa wa wa wa 麻烦看一下
只看楼主 加入收藏
傻瓜菜
Rank: 2
来 自:earth
等 级:论坛游民
帖 子:73
专家分:66
注 册:2011-10-4
结帖率:94.44%
收藏
已结贴  问题点数:20 回复次数:6 
wa wa wa wa 麻烦看一下
程序代码:
#include<stdio.h>
#include<string.h>
int main()
{
    int n,i,score[100][3],j,m,t,temp,pointer;
    char name[100][31],time[100][6],music[10000][31],listen[10000][6],change[31];
    float end;
    while(scanf("%d",&n)&&n)
    {
        for(i=0;i<n;i++)
        {
            scanf("%s%s",name[i],time[i]);
            score[i][0]=i;
            score[i][1]=((time[i][0]-'0')*10+time[i][1]-'0')*60+(time[i][3]-'0')*10+time[i][4]-'0';
            score[i][2]=0;
        }
        scanf("%d",&m);
        for(i=0;i<m;i++)
        {
            scanf("%s%s",music[i],listen[i]);
            for(j=0;j<n;j++)
                if(!strcmp(name[j],music[i]))
                {pointer=j;break;}
            temp=((listen[i][0]-'0')*10+listen[i][1]-'0')*60+(listen[i][3]-'0')*10+listen[i][4]-'0';
            end=(temp*1.0)/(score[pointer][1]*1.0);
            if(end<0.2) temp=0;
            else if(end<0.4) temp=1;
            else if(end<0.6) temp=2;
            else if(end<0.8) temp=3;
            else if(end<1.0) temp=4;
            else temp=5;
            score[pointer][2]=score[pointer][2]+temp;
        }
        for(i=0;i<n;i++)
        {
            for(j=i+1;j<n;j++)
            {
                if(score[i][2]<score[j][2])
                {
                    temp=score[i][0];
                    score[i][0]=score[j][0];
                    score[j][0]=temp;
                    temp=score[i][2];
                    score[i][2]=score[j][2];
                    score[j][2]=temp;
                }
            }
        }
        for(i=0;i<n;i++)
        {
            if(strcmp(name[score[i][0]],name[score[i][0]+1])>0&&score[i][2]==score[i+1][2])
            {
                strcpy(change,name[score[i][0]]);
                strcpy(name[score[i][0]],name[score[i][0]+1]);
                strcpy(name[score[i][0]+1],change);
                temp=score[i][2];
                score[i][2]=score[i+1][2];
                score[i+1][2]=temp;
            }
            t=strlen(name[score[i][0]]);
            name[score[i][0]][t]='\0';
            printf("%s %d\n",name[score[i][0]],score[i][2]);
        } 
    }
    return 0;
}





Description

你使用什么音乐播放器,iTunes、千千静听、酷狗、Winamp 还是 WMP?这些主流的播放器都有一个叫“我的最爱”(也有叫 Top 50 等其他名字)的动态播放列表,里面列出播放次数最多的前 50 首歌曲。

但我觉得,简单地用播放次数作为喜欢的标准是不够准确的。有些歌曲在唱完以后还有一段很长的伴奏,我普遍会直接点“下一首”来跳过,但这样播放器就 认为这首歌没有播放完毕,所以播放次数没有增加,但其实这首歌“几乎”播放完了;另一些歌是我不喜欢听的,可能只播放了前奏我就直接切歌了。所以,仅仅依 靠播放次数是无法区分上面两类歌曲我的喜好情况。

现在,我设计了一种新的统计方法:根据播放时间占总时间的百分比,给每次听歌打 0 到 5 分,最后通过总分来排序。

假设一首歌 ABC.mp3 长度是 01:40,即 100 秒。

如果某一次听歌我只听了 1-19 秒(少于 1/5),则本次得分为 0。
如果听了 20-39 秒,则得 1 分。
如果听了 40-59 秒,则得 2 分。
如果听了 60-79 秒,则得 3 分。
如果听了 80-99 秒,则得 4 分。
如果我耐心地听完整首歌(100秒),则得 5分。
Input

输入会有多组,每一组数据分两部分:

第一部分是歌曲信息列表
第一行是一个数字 n(0 <= n <= 100),表示后面会有 n 行歌曲信息。
接下来 n 行,每一行一条歌曲信息。包含歌曲的名字和总时间。
第二部分是我听歌记录的列表,格式和上面一样:
第一行是一个数字 m(0 <= m <= 10000),表示后面会有 m 行听歌记录。
接下来 m 行,每一行一条听歌记录。包含歌曲的名字和本次播放时间。
歌曲的名字里不会有空格,且长度不少过 30 个字符。
时间个格式是 mm:ss,即长度恒等于 5,分和秒用冒号隔开。时间最长不会超过 8分钟(又不是听相声)。
歌曲名字和时间中间用一个空格隔开。
当 n 等于 0 时,程序结束并退出。
Output

根据前面介绍的规则,算出每首歌的得分,并按照得分倒序输出“歌曲的名字”和“得分”(中间用一个空格隔开)。如果有两首歌的得分一样,那就根据歌曲名字来排序(按照字典顺序)。

Sample Input

5
gala_young_for_you.mp3 03:39
Another_Day_In_Paradise.mp3 05:22
Don't_Cry_For_Me_Argentina.mp3 05:38
I'll_Never_Stop.mp3 03:07
U_Make_Me_Wanna.mp3 03:42
11
I'll_Never_Stop.mp3 03:00
gala_young_for_you.mp3 03:30
Another_Day_In_Paradise.mp3 05:21
I'll_Never_Stop.mp3 03:07
U_Make_Me_Wanna.mp3 03:00
gala_young_for_you.mp3 03:37
Another_Day_In_Paradise.mp3 05:20
U_Make_Me_Wanna.mp3 03:42
Don't_Cry_For_Me_Argentina.mp3 01:07
I'll_Never_Stop.mp3 03:05
Don't_Cry_For_Me_Argentina.mp3 01:08
0
Sample Output

I'll_Never_Stop.mp3 13
U_Make_Me_Wanna.mp3 9
Another_Day_In_Paradise.mp3 8
gala_young_for_you.mp3 8
Don't_Cry_For_Me_Argentina.mp3 1
2011-12-18 20:23
hellovfp
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:禁止访问
威 望:30
帖 子:2976
专家分:7697
注 册:2009-7-21
收藏
得分:0 
你想表达什么意思呢?

我们都在路上。。。。。
2011-12-19 11:23
傻瓜菜
Rank: 2
来 自:earth
等 级:论坛游民
帖 子:73
专家分:66
注 册:2011-10-4
收藏
得分:0 
回复 2楼 hellovfp
我按照sample input 测试,输出答案是正确的,但是提交失败,我想问一下,是不是哪里我没考虑全?
2011-12-19 18:02
莫丶
Rank: 2
来 自:济南大学
等 级:论坛游民
帖 子:48
专家分:45
注 册:2011-1-2
收藏
得分:0 
ACM哎
2011-12-19 20:11
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:20 
试试这段代码。
程序代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct
{
    char name[32];
    int time;
    int score;
}MUSIC;
int cmpName(const void *a, const void *b)
{
    return strcmp(((MUSIC *)a)->name, ((MUSIC *)b)->name);
}
int cmpScore(const void *a, const void *b)
{
    int ds;
    ds = ((MUSIC *)b)->score - ((MUSIC *)a)->score;
    if(ds) return ds;
    return cmpName(a, b);
}
void getData(MUSIC *a)
{
    int m, s;
    scanf("%s %d:%d", a->name, &m, &s);
    a->time = m * 60 + s;
    a->score = 0;
}
int main()
{
    MUSIC music[100], t, *p;
    int n, m, i;
    while(scanf("%d", &n), n)
    {
        for(i = 0; i < n; getData(&music[i++]));
        qsort(music, n, sizeof(MUSIC), cmpName);
        scanf("%d", &m);
        for(i = 0; i < m; i++)
        {
            getData(&t);
            p = bsearch(&t, music, n, sizeof(MUSIC), cmpName);
            p->score += t.time * 5 / p->time;
        }
        qsort(music, n, sizeof(MUSIC), cmpScore);
        for(i = 0; i < n; i++) printf("%s %d\n", music[i].name, music[i].score);
    }
    return 0;
}

重剑无锋,大巧不工
2011-12-20 09:10
傻瓜菜
Rank: 2
来 自:earth
等 级:论坛游民
帖 子:73
专家分:66
注 册:2011-10-4
收藏
得分:0 
回复 5楼 beyondyf
第四十行:'=' : cannot convert from 'void *' to 'MUSIC *',我的vc编辑器无法通过,不过谢谢你,好简单的代码呀!
2011-12-20 21:44
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
我用的是GCC,VC下根据提示加个强制类型转换
p = (MUSIC *)bsearch(&t, music, n, sizeof(MUSIC), cmpName);

重剑无锋,大巧不工
2011-12-20 21:51
快速回复:wa wa wa wa 麻烦看一下
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020988 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved