题解 | #删数#

删数

https://www.nowcoder.com/practice/f9533a71aada4f35867008be22be5b6e

#include <iostream>
#include <vector>
using namespace std;
/*以一个长度为三的向量为例,我们不妨把它初始化为[0,0,0],向量的元素值为0也就表示元素对应的下标(rank)没有被删掉,为-1即表示这个元素对应的下标已经被删掉*/
int lastrank(int n, vector<int>& vec) {
    int rank;
    int count = n - 1;//需要删掉n-1个元素
    int j = 0;//报号计数,初始化为0
    //循环遍历向量
    while (count) {
        for (int i = 0; i < n; ++i) {//遍历一轮向量
            if (vec[i] == -1)continue;//跳过已删掉的元素
            if (j == 2) {
                vec[i] = -1;//删除
                j = 0;//重新计数
                count--;
            }
            else
                ++j;
        }
    }
    //最后的元素
    for (int i = 0; i < n; ++i)
        if (vec[i] == 0) {
            rank = i;
            break;
        }
    return rank;
}
int main() {
    int n;//总人数
    while (cin >> n) {
        vector<int> vec(n, 0);//全部初始化为0
        cout << lastrank(n, vec) << endl;
    }
    return 0;
}
全部评论

相关推荐

2025-12-16 17:17
门头沟学院 产品经理
烤点老白薯:他第二句话的潜台词是想让你帮他点个瑞幸或者喜茶啥的
mt对你说过最有启发的一...
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务