每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此。HF作为牛客的资深元老,自然也准备了一些小游戏。其中,有个游戏是这样的:首先,让小朋友们围成一个大圈。然后,他随机指定一个数m...

// test20.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include<iostream>
#include<vector>
#include<string>
#include<queue>
#include<stack>
#include<cstring>
#include<string.h>
#include<deque>
#include <forward_list>

using namespace std;


class Solution {
public:
    int LastRemaining_Solution(unsigned int n, unsigned int m)
    {
        //双向队列里面,删除比较方便
        if (n == 0||m==0) return -1;

        vector<unsigned int> vec; //存储正在操作的数组
        vector<unsigned int> copy; //存储临时拷贝的数组
        for (unsigned int i = 0;i < n;i++)
            vec.push_back(i);
     // copy = vec;
    
        while (vec.size()!=1)
        {
            int len = vec.size();
            int flag = m%len;//如果没有余数,删除最后一个数;有余数,删除余数减1的数
            if (flag == 0)
            {
                for (int i = 0;i <len -1;++i)
                {
                    copy.push_back(vec[i]);
                }
                vec.clear();
                vec = copy;
                copy.clear();
            }
            else
            {
                for (int i = flag;i <len ;++i)
                {
                    copy.push_back(vec[i]);
                }
                for (int i = 0;i < flag - 1;++i)
                {
                    copy.push_back(vec[i]);
                }
                vec.clear();
                vec = copy;
                copy.clear();
            }              
        }
        cout << "vec[0]:" << vec[0] << endl;
        return vec[0];
    }
};
int main()
{
    
    Solution so;
//  vector<int> numbers = { 1,2,3,4,5 };
 /*   bool result=so.IsContinuous(numbers);
    cout <<"result:"<< result << endl;*/

    int result = so.LastRemaining_Solution(5,3);
    cout << "result:" << result << endl;

    cout << endl;
    return 0;
}

转载于:https://www.cnblogs.com/wdan2016/p/6030830.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值