【CSP试题回顾】201712-2-游戏

2024-03-14 21:20
文章标签 csp 游戏 回顾 试题 201712

本文主要是介绍【CSP试题回顾】201712-2-游戏,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

CSP-201712-2-游戏

解题思路

代码实现了一个模拟游戏过程的算法,其中n个小朋友围成一圈,按照顺时针方向依次编号从1到n,然后按顺时针方向依次报数。每当报的数是k的倍数或者个位数是k时,报数的小朋友会被淘汰。游戏继续进行,直到只剩下一个小朋友,这个小朋友就是游戏的赢家。下面是具体的解题思路:

  1. 初始化变量
参数描述
n参与游戏的小朋友总数
k特定的数字,小朋友报的数如果是这个数的倍数或其个位数是这个数则被淘汰
i当前报数的小朋友在数组中的索引
num当前报的数
arr存储还在游戏中的小朋友的编号的向量
  1. 填充数组:使用一个循环,将1到n的每个数字添加到数组arr中,这表示初始时所有的小朋友都在游戏中。

  2. 游戏循环:使用while循环模拟游戏过程。这个循环会一直执行,直到arr数组的大小缩减到1,即只剩下一个小朋友,游戏结束。

  3. 判断条件: 在循环中,程序首先将当前报的数num转换为字符串t,然后检查两个条件:

    • 如果numk的倍数(num % k == 0),或者
    • num的个位数(t[t.size() - 1] - '0')等于k

    如果满足以上任一条件,则当前报数的小朋友(arr[i])被淘汰,从数组中删除。

  4. 更新索引和报数

    • 如果一个小朋友被淘汰,i的值会保持不变,但由于数组的大小减少了,我们需要对i执行模数组新大小的操作(i %= arr.size()),以确保i不会超出范围。
    • 如果当前小朋友没有被淘汰,那么i就递增1(并在必要时绕回到数组的开头),同时num(报的数)也递增1。
  5. 输出胜利者: 当数组中只剩下一个元素时,游戏结束,循环退出。最后剩下的这个元素(arr[0])就是获胜的小朋友的编号,输出这个编号。

完整代码

#include<iostream>
#include<vector>
#include<string>
using namespace std;int n, k, i, num = 1;int main() {    cin >> n >> k;vector<int>arr(n);for (int i = 0; i < n; i++) {arr[i] = i + 1;}while (arr.size() != 1){string t = to_string(num);if (num % k == 0) {arr.erase(arr.begin() + i);i %= arr.size();}else if ((t[t.size() - 1] - '0') == k) {arr.erase(arr.begin() + i);i %= arr.size();}else i = (i + 1) % arr.size();num++;}cout << arr[0];return 0;
}

请添加图片描述

这篇关于【CSP试题回顾】201712-2-游戏的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/809758

相关文章

2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题

题库来源:安全生产模拟考试一点通公众号小程序 2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题是由安全生产模拟考试一点通提供,流动式起重机司机证模拟考试题库是根据流动式起重机司机最新版教材,流动式起重机司机大纲整理而成(含2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题参考答案和部分工种参考解析),掌握本资料和学校方法,考试容易。流动式起重机司机考试技

国产游戏崛起:技术革新与文化自信的双重推动

近年来,国产游戏行业发展迅猛,技术水平和作品质量均得到了显著提升。特别是以《黑神话:悟空》为代表的一系列优秀作品,成功打破了过去中国游戏市场以手游和网游为主的局限,向全球玩家展示了中国在单机游戏领域的实力与潜力。随着中国开发者在画面渲染、物理引擎、AI 技术和服务器架构等方面取得了显著进展,国产游戏正逐步赢得国际市场的认可。然而,面对全球游戏行业的激烈竞争,国产游戏技术依然面临诸多挑战,未来的

CSP 2023 提高级第一轮 CSP-S 2023初试题 完善程序第二题解析 未完

一、题目阅读 (最大值之和)给定整数序列 a0,⋯,an−1,求该序列所有非空连续子序列的最大值之和。上述参数满足 1≤n≤105 和 1≤ai≤108。 一个序列的非空连续子序列可以用两个下标 ll 和 rr(其中0≤l≤r<n0≤l≤r<n)表示,对应的序列为 al,al+1,⋯,ar​。两个非空连续子序列不同,当且仅当下标不同。 例如,当原序列为 [1,2,1,2] 时,要计算子序列 [

火柴游戏java版

代码 /*** 火柴游戏* <p>* <li>有24根火柴</li>* <li>组成 A + B = C 等式</li>* <li>总共有多少种适合方式?</li>* <br>* <h>分析:</h>* <li>除去"+"、"="四根,最多可用火柴根数20根。</li>* <li>全部用两根组合成"1",最大数值为1111。使用枚举法,A和B范围在0~1111,C为A+B。判断</li>** @

国产游戏行业的崛起与挑战:技术创新引领未来

国产游戏行业的崛起与挑战:技术创新引领未来 近年来,国产游戏行业蓬勃发展,技术水平不断提升,许多优秀作品在国际市场上崭露头角。从画面渲染到物理引擎,从AI技术到服务器架构,国产游戏已实现质的飞跃。然而,面对全球游戏市场的激烈竞争,国产游戏技术仍然面临诸多挑战。本文将探讨这些挑战,并展望未来的机遇,深入分析IT技术的创新将如何推动行业发展。 国产游戏技术现状 国产游戏在画面渲染、物理引擎、AI

Java基础回顾系列-第七天-高级编程之IO

Java基础回顾系列-第七天-高级编程之IO 文件操作字节流与字符流OutputStream字节输出流FileOutputStream InputStream字节输入流FileInputStream Writer字符输出流FileWriter Reader字符输入流字节流与字符流的区别转换流InputStreamReaderOutputStreamWriter 文件复制 字符编码内存操作流(

Java基础回顾系列-第五天-高级编程之API类库

Java基础回顾系列-第五天-高级编程之API类库 Java基础类库StringBufferStringBuilderStringCharSequence接口AutoCloseable接口RuntimeSystemCleaner对象克隆 数字操作类Math数学计算类Random随机数生成类BigInteger/BigDecimal大数字操作类 日期操作类DateSimpleDateForma

Java基础回顾系列-第三天-Lambda表达式

Java基础回顾系列-第三天-Lambda表达式 Lambda表达式方法引用引用静态方法引用实例化对象的方法引用特定类型的方法引用构造方法 内建函数式接口Function基础接口DoubleToIntFunction 类型转换接口Consumer消费型函数式接口Supplier供给型函数式接口Predicate断言型函数式接口 Stream API 该篇博文需重点了解:内建函数式

Java基础回顾系列-第二天-面向对象编程

面向对象编程 Java类核心开发结构面向对象封装继承多态 抽象类abstract接口interface抽象类与接口的区别深入分析类与对象内存分析 继承extends重写(Override)与重载(Overload)重写(Override)重载(Overload)重写与重载之间的区别总结 this关键字static关键字static变量static方法static代码块 代码块String类特

Java基础回顾系列-第六天-Java集合

Java基础回顾系列-第六天-Java集合 集合概述数组的弊端集合框架的优点Java集合关系图集合框架体系图java.util.Collection接口 List集合java.util.List接口java.util.ArrayListjava.util.LinkedListjava.util.Vector Set集合java.util.Set接口java.util.HashSetjava