2020届vivo秋招笔试第2题-排队报数取数

题目描述:N人排成一队,从第1人开始报数,报到M的倍数的人出列,然后返回队头继续报数,直至所有人均出列。输入N和M,输出出列顺序。例如,当N=6,M=3时,出列顺序为3 6 4 2 5 1。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/*
将N (N<10000) 个人排成排,从第1个人开始报数;如果报数是M的倍数就出列,
报到队尾后则回到队头继续报,直到所有人都出列;

输入描述:输入2个正整数,空格分隔,第一个代表人数N,第二个代表M:(例子:6 3)
输出描述:输出一个int数组,每个数据表示原来在队列中的位置用空格隔开,表示出列顺序
3 6 4 2 5 1
*/

#include <iostream>
#include <string>
#include <vector>
#include <algorithm> 

using namespace std;

struct A
{
	int val;
	int count;
};

int main()
{
	int N, M;
	cin >> N >> M;
	vector<A> ivec;
	for (int i = 1; i <= N; i++)
	{
		A a;
		a.val = i;
		a.count = 0;
		ivec.push_back(a);
	}
	int count = 0;
	while (ivec.size() > 1)
	{
		for (int i = 0; i < ivec.size(); i++)
		{
			count++;
			ivec[i].count = count;
			if ((ivec[i].count) % M == 0)
			{
				cout << ivec[i].val << " ";
				ivec.erase(ivec.begin() + i);
				i--;
			}
		}
	}
	cout << ivec[0].val << endl;

	return 0;
}

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值