mp3的光标位置

#include <iostream>
#include <vector>
#include <string>
using namespace std;

/*
思路:	将显示的4个歌放到一个数组(show)中;起始时,show中显示前四首歌(1,2,3,4);
		先判断需不需要翻页,
		翻页情况1:	从第一个翻到最后一个,光标指向最后一个
					显示的数据 (n-3,n-2,n-1,n)
		翻页情况2:	从最后一个翻到第一个,光标指向第一个
					显示的数据 (1,2,3,4)
		翻页情况3: 正常翻页,U 向上翻,所有元素--; D 向下翻 所有元素++;
		如果不需要翻页,直接该光标位置
		假设数组(show)的角标为光标, 光标指向最后一个,也就是指向show中的最后一个,即flag = 3,
		光标指向第一个,也就是指向show中的第一个,即flag = 0,
		U 向上翻,flag--; D 向下翻, flag++;
*/
class Solution{
	vector<int> mp;
	int flag = 0;
public:
	void UpAndDown(const int n,const string cmd)
	{
		int size = cmd.size();
		if (n <= 4) {
			for (int i = 1; i <= n; i++) {
				mp.push_back(i);
			}
			for (int i = 0; i < n; i++)
				cout << mp[i] << ' ';
			cout << endl;
			for(int i = 0;i < size;i++)
			{
				if (cmd[i] == 'U') {
					if (flag == 0) {
						flag = n - 1;
					}
					else {
						flag--;
					}
				}
				else {
					if (flag == n - 1) {
						flag = 0;
					}
					else {
						flag++;
					}
				}
			}
			cout << mp[flag] << endl;
		}
		else {
			for (int i = 1; i <= 4; i++) {
				mp.push_back(i);
			}
			for (int i = 0; i < size; i++)
			{
				if (cmd[i] == 'U') {
					if (mp[0] == 1 && flag == 0) {  //翻页情况1
						mp.clear();
						mp.push_back(n - 3);
						mp.push_back(n - 2);
						mp.push_back(n - 1);
						mp.push_back(n);
						flag = 3;
					}
					else if (flag == 0 && mp[0] != 1) {  //正常翻页
						mp[0]--;
						mp[1]--;
						mp[2]--;
						mp[3]--;
					}
					else {  //不需要翻页
						flag--;
					}
				}
				else {
					if (mp[3] == n && flag == 3) {  //翻页情况2
						mp.clear();
						mp.push_back(1);
						mp.push_back(2);
						mp.push_back(3);
						mp.push_back(4);
						flag = 0;
					}
					else if (flag == 3 && mp[3] != n) { //正常翻页
						mp[0]++;
						mp[1]++;
						mp[2]++;
						mp[3]++;
					}
					else {  //不翻页
						flag++;
					}
				}
			}
			cout << mp[0] << ' ' << mp[1] << ' ' << mp[2] << ' ' << mp[3] << endl;
			cout << mp[flag] << endl;
		}
		
	}

};

int main()
{
	
	int n;
	string cmd;
	while (cin >> n >> cmd)
	{
		Solution A;
		A.UpAndDown(n, cmd);
	}
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值