CSP 2017年12月第2题 游戏
-
在这里 发现了一个之前的一个错误想法:对一个数组 初始化为 同一个数据
int arr[100]={0}; //这样在全局数组 是会将其 全部初始化为 0 int arr[100]={-1}; //在全局数组 这样只会将第一个元素 设置为 -1,其余默认设置为 0
在全局变量 可以将其全部设置为0,但是 若在局部数组,则会是不确定的数据
(这个问题 我还是重新写一个笔记吧)
-
这题可以直接对数组进行操作即可,下面是思路
建立一个数组,里面需要存放当前学生报数 的数据,一开始初始化为 0
设置变量
number 和 index
分别作为 当前报数 和 数组下标索引-
若过当前 数据为 -1 ,表示已经淘汰,然后使得 index++
-
若 下标index > n 表示 报数已经经过一轮(包括已经淘汰的人员)
-
若过没有淘汰,则让报数 +1,然后存储下当前的 报数
并且判断 当前报数是否要被淘汰
如果淘汰,则使得数据为 -1,然后人数 -1,下标 +1
-
直到最后 人数剩下 一个 结束
-
然后找到那个没有被淘汰的下标即可
-
-
下面源码展示
#include<bits/stdc++.h>
using namespace std;
int arr[1010]={0};
int main()
{
int n,k;
cin>>n>>k;
int num=n;
int number=0;//表示现在报数 多少
int index=1;//从下标 1 开始
while(num!=1)
{
if(arr[index]==-1)
index++;
if(index>n)
index=1;
if(arr[index]!=-1)//表示没有淘汰
{
number++;//报数 +1
arr[index] = number;
if(number%k == 0 || number%10 == k)
{
arr[index]=-1;
num--;//人数 -1
}
index++;//下标+1 指向下一个
}
}
for(int i=1;i<=n;i++)
if(arr[i]!=-1)
cout<<i;
return 0;
}