题目链接如下: 题目链接
题目本身逻辑简单,我coding的时候和方法三的逻辑一模一样,区别在于,题目用的是bool数组的false和true区分小朋友是否已经被淘汰,我定义的是整型数组,初始化为1,那么淘汰的话就赋为0,这样貌似也可以起到区分的作用吧?然鹅实际是我的代码陷入循环出不来,没有办法输出结果,我反复确认过不是我其他方面的逻辑错误,就是我只要把整型数组改为布尔数组就可以正确跑得动,求问这是怎么回事,虽然我不是用bool判断是否淘汰,但整型数组的0/1不也可以的嘛?理论上就是跟初始化的不一样说明就已经淘汰了嘛。代码对比如下。
这是我写的代码:
#include<cstdio>
#include<iostream>
using namespace std;
int main()
{
int n,k;
cin>>n>>k;
int p[1001]={1};
int num=0,m=n;
int i=-1;
while(m>1){
i++;
i=i%n;
if(p[i]==1) {
num++;
if(num%10==k||num%k==0){
p[i]=0;
m--;
}
}
}
for(int j=0;j<n;j++){
if(p[j]==1){
cout<<j+1;
break;
}
}
}
这个代码无法输出结果,然后下面这个是仅仅修改为bool型数组后的代码,是可以AC的,真的不会了,求解
#include<cstdio>
#include<iostream>
using namespace std;
int main()
{
int n,k;
cin>>n>>k;
bool p[1001]={false};
int num=0,m=n;
int i=-1;
while(m>1){
i++;
i=i%n;
if(p[i]==false) {
num++;
if(num%10==k||num%k==0){
p[i]=true;
m--;
}
}
}
for(int j=0;j<n;j++){
if(p[j]==false){
cout<<j+1;
break;
}
}
}