青岛市黄岛区网站建设市场营销策略有哪4种
题目描述
有 n 个小朋友围成一圈玩游戏,小朋友从 1 至 n 编号,2 号小朋友坐在 1 号小朋友的顺时针方向,3 号小朋友坐在 2 号小朋友的顺时针方向,……,1 号小朋友坐在 n 号小朋友的顺时针方向。
游戏开始,从 1 号小朋友开始顺时针报数,接下来每个小朋友的报数是上一个小朋友报的数加 1。
若一个小朋友报的数为 k 的倍数或其末位数(即数的个位)为 k,则该小朋友被淘汰出局,不再参加以后的报数。
当游戏中只剩下一个小朋友时,该小朋友获胜。
例如,当 n=5,k=2 时:
1 号小朋友报数 1
2 号小朋友报数 2 淘汰;
3 号小朋友报数 3;
4 号小朋友报数 4 淘汰;
5 号小朋友报数 5;
1 号小朋友报数 6 淘汰;
3 号小朋友报数 7;
5 号小朋友报数 8 淘汰;
3 号小朋友获胜。
给定 n 和 k,请问最后获胜的小朋友编号为多少?
输入
输入一行,包括两个整数 n 和 k,意义如题目所述。
数据范围
对于所有评测用例,1≤n≤1000,1≤k≤9。
输出
输出一行,包含一个整数,表示获胜的小朋友编号。
样例输入
5 2
样例输出
3
提示
来源
#include<bits/stdc++.h>
using namespace std;
int n,k;
queue<int>p;
int main(){cin>>n>>k;for(int i=1;i<=n;i++){p.push(i);}int s=1;while(p.size()>1){if(s%k==0||s%10==k){p.pop();}else{int t=p.front();p.pop();p.push(t);}s+=1;}cout<<p.back();return 0;}