csp 游戏 c++满分实现

重要一点:使用周期来表示编号时,如果有n个人,那么第n个人n%n==0,所以余数为0,表示第n个人,那么输出时要特别判断一下,要是余数为0,就输出n

  1. 输入参数
    • n 代表总人数或总元素数量。
    • k 代表一个特定的数字,用于确定淘汰规则。
  2. 初始化
    • flag 数组用于标记哪些元素或人已经被淘汰。
    • cnt 初始化为 n,表示当前还未被淘汰的元素或人的数量。
    • i 和 cont 是循环的计数器,其中 i 代表当前考虑的元素或人的位置,cont 可能代表某种累积的计数或顺序。
  3. 淘汰规则
    • 函数 fun 检查给定的数字 cont 的个位数是否为 k。如果是,则返回 true,表示这个元素或人应该被淘汰。
    • 在主循环中,每次迭代检查 cont 的个位数是否等于 k,或者通过 fun 函数判断,如果满足条件,则该元素或人被淘汰(flag[i%n] 设置为 1),cnt 减少,并且移动到下一个元素或人。
  4. 循环结束条件
    • 当 cnt 减到 1 时,表示只剩下最后一个未被淘汰的元素或人,此时循环结束。
    • 如果在循环中遇到已经被淘汰的元素或人(flag[i%n] == 1),则跳过并继续检查下一个。
  5. 输出结果
    • 循环结束后,输出最后未被淘汰的元素或人的位置。如果其位置恰好是 n,则直接输出 n;否则,输出 i%n
#include<iostream>
using namespace std;
int n,k;
int flag[1005];
bool fun(int cont){
	int tp=cont%10;
	if(tp==k){
		return true;
	} 
	else{
		return false;
	}
}
int main(){
	cin>>n>>k;
	int cnt=n;	
	int i=1;
	int cont=1;
		while(1){
			if(flag[i%n]==1){
				i++;
				continue;
			}
			else if(cnt==1){
				if(i%n==0){
					cout<<n;
				}
				else{
					cout<<i%n;
				}
				break;
			}
			else{            
				if(cont%k==0||fun(cont)){//要被淘汰 
					flag[i%n]=1;
					cnt--;
					i++;
					cont++; 
				}
				else{
					i++;
					cont++;
				} 
			}
		}

	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值