码迷,mamicode.com
首页 > 其他好文 > 详细

报数出局

时间:2019-11-17 17:59:06      阅读:95      评论:0      收藏:0      [点我收藏+]

标签:str   input   put   序号   ISE   length   删除   iss   编写   

问题:有a个人围成一圈,按序号编号,从第一个人开始报数,数到b时该人退出,并且下一个从1重新开始报数,求出出圈人的顺序。

clear all;close all;clc;
in=input(‘Enter a and b separated by whitespace:\n‘,‘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的最后一个元素。

编写算法的乐趣便是考虑各种特殊情况,然后将其解决!

报数出局

标签:str   input   put   序号   ISE   length   删除   iss   编写   

原文地址:https://www.cnblogs.com/cq-shihao/p/11877121.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!