csp 201712-2 游戏,有一些疑惑求解
  • 板块题目总版
  • 楼主Ben_Yeung
  • 当前回复1
  • 已保存回复1
  • 发布时间2021/11/21 23:43
  • 上次更新2023/11/3 23:46:19
查看原帖
csp 201712-2 游戏,有一些疑惑求解
580757
Ben_Yeung楼主2021/11/21 23:43

题目链接如下: 题目链接

题目本身逻辑简单,我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;
	} 
    }
}
2021/11/21 23:43
加载中...