link:http://acm.sdibt.edu.cn:8080/judge/contest/view.action?cid=337#problem/C

中文题目不解释,题目中的“(一 开始)播放器会播放播放列表中的(第一首歌),当按下“(下一首)”按钮时,它会播放当前歌曲在播放列表中的下一首歌,若(当前歌曲)就是播放列表中的 (最后一首) 歌时,它(仍)会播放播放列表中的(最后一首歌);当按下“(上一首)”按钮时,它会(清除播放记录)!!注意是要清除的!!!!中的(最后一首歌),并 播放清除后播放记录中的(最后一首歌),若清除后播放(记录为空),则播放播放列表中的(第一首歌);当按下播放列表中的某一首歌曲,它会播放该首歌曲。 任何时候,当播放器播放一首歌时,如果该歌曲与播放记录中的(最后一首不同)或者(播放记录为空),便将该歌曲添加到播放记录中(成为最后一首)”为重 点,按括号中的关键词写出代码即可,坑爹的用栈怎么写都错,后来用数组模拟才对的,唉。。。~~
code:

#include <iostream>
#include <cstdio>
#include <cstring>
#define MAX 10010
using namespace std;

int main()
{
    char command[10];
    int a[MAX];
    int t,n,m,x,i,now;
    scanf("%d",&t);
    while(t--)
    {
        now=i=1;
        memset(a,0,sizeof(a));
        a[0]=1;//初始为第1首
        scanf("%d%d",&n,&m);
        while(m--)
        {
            scanf("%s",command);
            if(strcmp(command,"PLAY")==0)
            {
                scanf("%d",&x);
                printf("%d\n",x);
                now=x;//目前为第x首
                if(i==0||a[i-1]!=x)//如果为空或与最后一个不同
                    a[i++]=x;
            }
            else if(strcmp(command,"PRE")==0)
            {
                i--;
                if(i==0)//如果为空,播放第一首
                {
                    printf("1\n");
                    a[i++]=1;
                    now=1;
                }
                else
                {
                    printf("%d\n",a[i-1]);
                    now=a[i-1];
                }//不为空,播放上一首
            }
            else if(strcmp(command,"NEXT")==0)
            {
                if(now!=n)//不是最后一首
                    printf("%d\n",++now);//播放下一首
                else
                    printf("%d\n",n);
                if(a[i-1]!=now)
                        a[i++]=now;
            }
        }
    }
    return 0;
}

 

发表评论

电子邮件地址不会被公开。

Post Navigation