報數出局

問題:有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的最後一個元素。spa

編寫算法的樂趣即是考慮各類特殊狀況,而後將其解決!orm

相關文章
相關標籤/搜索