临沂大企业网站,wordpress手机主题mip,军事新闻2023,今天体育新闻直播【华为OD-E卷 - 报数游戏 100分#xff08;python、java、c、js、c#xff09;】
题目
100个人围成一圈#xff0c;每个人有一个编码#xff0c;编号从1开始到100。 他们从1开始依次报数#xff0c;报到为M的人自动退出圈圈#xff0c;然后下一个人接着从1开始报数python、java、c、js、c】
题目
100个人围成一圈每个人有一个编码编号从1开始到100。 他们从1开始依次报数报到为M的人自动退出圈圈然后下一个人接着从1开始报数直到剩余的人数小于M。 请问最后剩余的人在原先的编号为多少
输入描述
输入一个整数参数 M
输出描述
如果输入参数M小于等于1或者大于等于100输出“ERROR!”
否则按照原先的编号从小到大的顺序以英文逗号分割输出编号字符串
用例
用例一
输入
3输出
58,91用例二
输入
4输出
34,45,97python解法
解题思路这个问题类似于约瑟夫环的变形。题目要求从1到100的100个人围成一圈每次按照给定的间隔 m 依次淘汰人直到剩下的人数少于 m 为止最后输出剩下的人的编号并按从小到大排序。
解题步骤
初始化人数创建 people 列表包含 1 到 100 的编号。 设置初始索引用 idx 0 表示当前淘汰的位置索引。 模拟淘汰过程 每次按照 m 计算需要淘汰的索引 (idx m - 1) % len(people) pop() 移除相应索引处的人 直到 people 数量小于 m 时停止 排序并输出将剩下的 people 按升序排序并用 “,” 连接成字符串返回。
m int(input()) # 读取输入的整数 mdef iterative_solution(m):# 判断 m 是否在有效范围内if m 1 or m 100:return ERROR! # 输入无效时返回 ERROR!people list(range(1, 101)) # 初始化 1~100 的列表idx 0 # 初始化当前索引while len(people) m: # 当剩余人数不少于 m 时继续淘汰idx (idx m - 1) % len(people) # 计算当前淘汰的位置people.pop(idx) # 移除该索引位置的元素return ,.join(map(str, sorted(people))) # 返回剩余人数按升序排序并转换为字符串print(iterative_solution(m)) # 输出结果
java解法
解题思路这个问题本质上是一个变形的约瑟夫问题要求从 1 到 100 个人中每次按照 m 报数并淘汰直到剩余人数少于 m。然后输出剩下的人的编号按从小到大排序。
解题步骤 输入 m
如果 m 不满足 1 m 100直接返回 “ERROR!”。 初始化数据结构
removed[100] 作为布尔数组用于记录哪些人已被淘汰true 表示已淘汰。 count 记录当前报数到多少。 remaining 记录当前剩余人数初始化为 100。 currentIndex 记录当前正在报数的人的索引初始化为 0。 模拟报数淘汰过程
遍历 removed 数组跳过已淘汰的人只对未淘汰的人进行报数。 每当 count m 时淘汰该人设置 removed[currentIndex] true重置 count 并减少 remaining。 使用 currentIndex (currentIndex 1) % 100 来循环遍历整个数组。 筛选剩余人员并输出
遍历 removed 数组将未淘汰的人的编号加入 StringJoiner 并返回
import java.util.Scanner;
import java.util.StringJoiner;public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);int m sc.nextInt(); // 读取输入的整数 mSystem.out.println(getResult(m)); // 调用函数并输出结果}public static String getResult(int m) {// 判断 m 是否在有效范围内if (m 1 || m 100) return ERROR!;boolean[] removed new boolean[100]; // 标记哪些人被淘汰int count 0; // 报数计数int remaining 100; // 剩余人数int currentIndex 0; // 当前报数的位置// 只要剩余人数不少于 m就继续淘汰while (remaining m) {// 仅对未被淘汰的人进行报数if (!removed[currentIndex]) {count; // 计数器 1// 当报数达到 m 时该人被淘汰if (count m) {removed[currentIndex] true; // 标记该人被淘汰count 0; // 重置计数器remaining--; // 剩余人数减少}}// 移动到下一个人循环列表currentIndex (currentIndex 1) % 100;}// 使用 StringJoiner 构造剩余未被淘汰的人的编号字符串StringJoiner sj new StringJoiner(,);for (int i 0; i 100; i) {if (!removed[i]) {sj.add(String.valueOf(i 1)); // 添加未被淘汰的人编号编号从1开始}}return sj.toString(); // 返回最终结果字符串}
}
C解法
解题思路输入 m
若 m 不满足 1 m 100直接输出 “ERROR!” 并退出。 初始化 people 数组
使用 vector 存储 1~100 的编号。 模拟报数淘汰过程
设定 idx 作为当前要淘汰的索引初始值 0。 循环淘汰当 people 数量 不少于 m 时 计算下一轮被淘汰者的索引位置idx (idx m - 1) % people.size(); 使用 erase() 移除该索引处的人。 排序并输出结果
sort(people.begin(), people.end()); 保障剩下的编号按升序排列。 逐个打印剩下的编号并使用 “,” 进行分隔
#include iostream
#include vector
#include algorithmusing namespace std;int main() {int m;cin m; // 读取输入的整数 m// 判断 m 是否在有效范围内if (m 1 || m 100) {cout ERROR! endl;return 0;}vectorint people(100); // 存储 1~100 的人for (int i 0; i 100; i) {people[i] i 1; // 初始化编号}int idx 0; // 当前淘汰位置索引// 只要剩余人数不少于 m就继续淘汰while (people.size() m) {idx (idx m - 1) % people.size(); // 计算当前淘汰的人people.erase(people.begin() idx); // 移除该索引处的人}sort(people.begin(), people.end()); // 确保剩下的编号升序排列// 输出最终剩余的人的编号for (size_t i 0; i people.size(); i) {cout people[i];if (i ! people.size() - 1) cout ,; // 逗号分隔输出}return 0;
}
C解法 解题思路
更新中JS解法 解题思路 读取输入 m
若 m 不在有效范围 1 m 100返回 “ERROR!”。 初始化 people 数组
使用 Array.from({ length: 100 }, (_, i) i 1) 创建 1~100 的编号数组。 模拟报数淘汰过程
设定 index 作为当前要淘汰的索引初始值 0。 循环淘汰当 people 数量 不少于 m 时 计算当前需要淘汰的索引 index (index m - 1) % people.length 使用 splice(index, 1) 移除该索引处的人。 返回剩余人员编号
people.join() 将剩余编号以 , 分隔并返回
const readline require(readline);const rl readline.createInterface({input: process.stdin,output: process.stdout,
});// 监听标准输入读取用户输入的 m
rl.on(line, (line) {const m parseInt(line); // 解析输入的整数 mconsole.log(calculateSurvivors(m)); // 计算并输出剩余编号
});// 计算最终剩余的人员编号
function calculateSurvivors(m) {// 检查输入 m 是否有效if (m 1 || m 100) {return ERROR!;}// 初始化 1~100 的编号数组const people Array.from({ length: 100 }, (_, i) i 1);let index 0; // 当前淘汰索引// 只要剩余人数不少于 m就继续淘汰while (people.length m) {index (index m - 1) % people.length; // 计算当前要淘汰的索引people.splice(index, 1); // 移除该索引处的人}return people.join(); // 返回剩余人员的编号以 , 连接
}
注意
如果发现代码有用例覆盖不到的情况欢迎反馈会在第一时间修正更新。 解题不易如对您有帮助欢迎点赞/收藏 文章转载自: http://www.morning.nrbqf.cn.gov.cn.nrbqf.cn http://www.morning.nlzpj.cn.gov.cn.nlzpj.cn http://www.morning.shsh1688.com.gov.cn.shsh1688.com http://www.morning.ntqjh.cn.gov.cn.ntqjh.cn http://www.morning.fqmbt.cn.gov.cn.fqmbt.cn http://www.morning.wslr.cn.gov.cn.wslr.cn http://www.morning.jjpk.cn.gov.cn.jjpk.cn http://www.morning.knsmh.cn.gov.cn.knsmh.cn http://www.morning.kvzvoew.cn.gov.cn.kvzvoew.cn http://www.morning.brlcj.cn.gov.cn.brlcj.cn http://www.morning.lxhny.cn.gov.cn.lxhny.cn http://www.morning.jgmlb.cn.gov.cn.jgmlb.cn http://www.morning.zstry.cn.gov.cn.zstry.cn http://www.morning.kkqgf.cn.gov.cn.kkqgf.cn http://www.morning.dmzqd.cn.gov.cn.dmzqd.cn http://www.morning.xsqbx.cn.gov.cn.xsqbx.cn http://www.morning.qnzk.cn.gov.cn.qnzk.cn http://www.morning.tpqrc.cn.gov.cn.tpqrc.cn http://www.morning.fycjx.cn.gov.cn.fycjx.cn http://www.morning.wptrm.cn.gov.cn.wptrm.cn http://www.morning.dzgmj.cn.gov.cn.dzgmj.cn http://www.morning.cctgww.cn.gov.cn.cctgww.cn http://www.morning.wtcyz.cn.gov.cn.wtcyz.cn http://www.morning.nmnhs.cn.gov.cn.nmnhs.cn http://www.morning.cwwts.cn.gov.cn.cwwts.cn http://www.morning.ftync.cn.gov.cn.ftync.cn http://www.morning.lzwfg.cn.gov.cn.lzwfg.cn http://www.morning.kjkml.cn.gov.cn.kjkml.cn http://www.morning.mlwpr.cn.gov.cn.mlwpr.cn http://www.morning.gkjyg.cn.gov.cn.gkjyg.cn http://www.morning.mrfgy.cn.gov.cn.mrfgy.cn http://www.morning.bmfqg.cn.gov.cn.bmfqg.cn http://www.morning.qwwcf.cn.gov.cn.qwwcf.cn http://www.morning.qdrhf.cn.gov.cn.qdrhf.cn http://www.morning.thbnt.cn.gov.cn.thbnt.cn http://www.morning.pqcrz.cn.gov.cn.pqcrz.cn http://www.morning.twwts.com.gov.cn.twwts.com http://www.morning.wqtzs.cn.gov.cn.wqtzs.cn http://www.morning.csnch.cn.gov.cn.csnch.cn http://www.morning.cwfkm.cn.gov.cn.cwfkm.cn http://www.morning.dpfr.cn.gov.cn.dpfr.cn http://www.morning.zkdbx.cn.gov.cn.zkdbx.cn http://www.morning.gnghp.cn.gov.cn.gnghp.cn http://www.morning.wfjyn.cn.gov.cn.wfjyn.cn http://www.morning.jcxyq.cn.gov.cn.jcxyq.cn http://www.morning.ndltr.cn.gov.cn.ndltr.cn http://www.morning.qlhwy.cn.gov.cn.qlhwy.cn http://www.morning.yfphk.cn.gov.cn.yfphk.cn http://www.morning.kwz6232.cn.gov.cn.kwz6232.cn http://www.morning.cftkz.cn.gov.cn.cftkz.cn http://www.morning.qxltp.cn.gov.cn.qxltp.cn http://www.morning.sjbpg.cn.gov.cn.sjbpg.cn http://www.morning.rzcmn.cn.gov.cn.rzcmn.cn http://www.morning.ltbwq.cn.gov.cn.ltbwq.cn http://www.morning.lftpl.cn.gov.cn.lftpl.cn http://www.morning.fhcwm.cn.gov.cn.fhcwm.cn http://www.morning.hsflq.cn.gov.cn.hsflq.cn http://www.morning.cnqff.cn.gov.cn.cnqff.cn http://www.morning.zglrl.cn.gov.cn.zglrl.cn http://www.morning.zcnfm.cn.gov.cn.zcnfm.cn http://www.morning.sqhlx.cn.gov.cn.sqhlx.cn http://www.morning.xpgwz.cn.gov.cn.xpgwz.cn http://www.morning.gmgnp.cn.gov.cn.gmgnp.cn http://www.morning.xctdn.cn.gov.cn.xctdn.cn http://www.morning.mfmx.cn.gov.cn.mfmx.cn http://www.morning.rfqk.cn.gov.cn.rfqk.cn http://www.morning.trzmb.cn.gov.cn.trzmb.cn http://www.morning.tygn.cn.gov.cn.tygn.cn http://www.morning.bfrsr.cn.gov.cn.bfrsr.cn http://www.morning.ctqbc.cn.gov.cn.ctqbc.cn http://www.morning.kgkph.cn.gov.cn.kgkph.cn http://www.morning.pltbd.cn.gov.cn.pltbd.cn http://www.morning.qkqzm.cn.gov.cn.qkqzm.cn http://www.morning.qczjc.cn.gov.cn.qczjc.cn http://www.morning.kphsp.cn.gov.cn.kphsp.cn http://www.morning.zyndj.cn.gov.cn.zyndj.cn http://www.morning.dkqbc.cn.gov.cn.dkqbc.cn http://www.morning.ynjhk.cn.gov.cn.ynjhk.cn http://www.morning.tpxgm.cn.gov.cn.tpxgm.cn http://www.morning.bgkk.cn.gov.cn.bgkk.cn