MP3光标

题目描述

MP3 Player因为屏幕较小,显示歌曲列表的时候每屏只能显示几首歌曲,用户要通过上下键才能浏览所有的歌曲。为了简化处理,假设每屏只能显示4首歌曲,光标初始的位置为第1首歌。

 

现在要实现通过上下键控制光标移动来浏览歌曲列表,控制逻辑如下:

  1. 歌曲总数<=4的时候,不需要翻页,只是挪动光标位置。

光标在第一首歌曲上时,按Up键光标挪到最后一首歌曲;光标在最后一首歌曲时,按Down键光标挪到第一首歌曲。

其他情况下用户按Up键,光标挪到上一首歌曲;用户按Down键,光标挪到下一首歌曲。

  2. 歌曲总数大于4的时候(以一共有10首歌为例):

 

特殊翻页:屏幕显示的是第一页(即显示第1 – 4首)时,光标在第一首歌曲上,用户按Up键后,屏幕要显示最后一页(即显示第7-10首歌),同时光标放到最后一首歌上。同样的,屏幕显示最后一页时,光标在最后一首歌曲上,用户按Down键,屏幕要显示第一页,光标挪到第一首歌上。

一般翻页:屏幕显示的不是第一页时,光标在当前屏幕显示的第一首歌曲时,用户按Up键后,屏幕从当前歌曲的上一首开始显示,光标也挪到上一首歌曲。光标当前屏幕的最后一首歌时的Down键处理也类似。

其他情况,不用翻页,只是挪动光标就行。

 


输入描述:

输入说明: 1 输入歌曲数量 2 输入命令 U或者D

输出描述:

输出说明 1 输出当前列表 2 输出当前选中歌曲

输入例子:
10
UUUU
输出例子:
7 8 9 10
7

【代码】
 
  1. #include<iostream>
  2. #include<string>
  3. using namespace std;
  4.  
  5. int  main()
  6. {
  7.     string str;
  8.     int n;
  9.     while(cin>>n>>str)
  10.     {  
  11.        int cur=1;
  12.        int begin=1;
  13.        int sum=0;
  14.         
  15.  
  16.       for(int i=0; i<str.size(); i++)    //zhu
  17.       {
  18.           if(str[i]=='D')
  19.            {
  20.                 cur++;
  21.                if(cur>num)                 //光标大于num,光标置1,开始1
  22.                 {
  23.                      cur=1;
  24.                    begin=1;
  25.                 }
  26.                if(cur>4 && cur>=begin+3)   //光标大于num,光标和开始位置差3
  27.                    begin = cur-3 ;
  28.              }
  29.   
  30.           if(str[i]=='U')
  31.            {
  32.                 cur--;
  33.                if(cur==0)
  34.                 {
  35.                      cur += n;
  36.                     begin = n-3;
  37.                 }
  38.                 if(cur<n-3 && cur==begin-1)
  39.                      begin=cur;
  40.             }
  41.          }

  42.        if(n >= 4)
  43.        {
  44.           for(int i=0; i<3 ; i++)
  45.              cout<<begin+i<<" ";
  46.           cout<<begin+i<<endl;
  47.        }

  48.        if(n < 4)
  49.        {
  50.            for(int i=1; i<n; i++)
  51.                 cout<<i<<" ";
  52.             cout<<i<<endl;
  53.        }
  54.      cout<<cur<<endl;
  55.    }

  56.   return 0;
  57. }



 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

屠变恶龙之人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值