题目描述
算法设计+题目分析
吐槽一下
这道题是传统的取模运算的变种,在于每个人所代表的数字是会变的(尽管号码不变)
算法设计+题目分析
建立一个全局变量 num,代表每个人报的号数,然后从0至n-1的循环,利用vector中的erase抹去报号的同学,抹去的同时步长要减1,循环到最后当vector里只有一个元素的时候,这个元素就是获胜的同学。
几个核心点
无
注意点+记录点
无
代码(100分)
环境
Visual C++6.0
#include <stdio.h>
#include <vector>
using namespace std;
int main(){
int n,k;
scanf("%d %d", &n, &k);
vector<int> result;
for(int i=1; i<=n; i++) result.push_back(i);//将同学们的号码放入数组,1至n
int num=1;//起全局变量作用,报的号数
while(result.size()>1){
for(int j=0;j<result.size();j++){
if (num%k==0 || num%10==k){
result.erase(result.begin()+j);
j--;//这个同学报到号数了,需要抹去他,并且步长减1
}
if (result.size()==1) break;
num++;
}
}
printf("%d", result[0]);
}