报数出局
Posted cq-shihao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了报数出局相关的知识,希望对你有一定的参考价值。
问题:有a个人围成一圈,按序号编号,从第一个人开始报数,数到b时该人退出,并且下一个从1重新开始报数,求出出圈人的顺序。
clear all;close all;clc; in=input(‘Enter a and b separated by whitespace: ‘,‘s‘); t=find(isspace(in)); a=str2double(in(1:t-1)); b=str2double(in(t+1:length(in))); if isnan(a)||isnan(b) error(‘Input format error:enter two number separated by whitespace‘); end x=1:a; y=zeros(1,a); i=1; t=b; while ~isempty(x) if(t>length(x))%首次输入的a和b可能是a<b, t=mod(t,length(x)); if t==0 %当b>length(x)的时候会出现这种情况,需要把t对应到最后一个元素 t=length(x); end end y(i)=x(t); i=i+1; x(t)=[]; t=t-1+b;%已经删除了一个数,退后一步再往前数b个数 end disp(y);
需要格外注意的情况是当步长b大于剩余人数,t=mod(t,length(x)为0表示数到x的最后一个元素。
编写算法的乐趣便是考虑各种特殊情况,然后将其解决!
以上是关于报数出局的主要内容,如果未能解决你的问题,请参考以下文章
幸存者游戏, 数字对生成树, 飞机最低可俯冲高度,整理书架 -paypal笔试题2019