首页 > 技术文章 > 用Matlab完成:从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。

cxmhy 2014-11-13 11:07 原文

程序思路:

 

(1)一圈人循环报数,报数报到3的人,将其置为0,表示被淘汰;

(2)那么在接下去的循环中,被淘汰的人不参与报数;

(3)直到仅有1人没被淘汰,并显示出他之前的编号。

 

 

程序实现如下:

clear all

n=input('Please input the number:')

A=zeros(1,n)

for i=1:n                                                         %对每个人进行顺序编号
     A(i)=i
end


out=0;                                                           %out代表出局的人,k是用来1,2,3计数的
k=0;

while(out<n-1)                                                %循环终止条件,即最后只剩下一个人时
     for i=1:n
         if(A(i))                                                   %只有值非零,才可以继续参加报数
            k=k+1;
         end
        if(k==3)
            A(i)=0;                                              %一旦报3,即将值置为0,代表淘汰,以后报数也不会参与
            k=0;                                                  %k进行初始化
            out=out+1;                                        %出局人数+1
        end
    end
end


for i=1:n                                                        %找出最后的人对应的编号并进行显示
     if(A(i))
        disp(['The last one is:',num2str(A(i))])
     end
end

 

运行结果如下:

Please input the number:7
The last one is:4

Please input the number:20
The last one is:20

 

推荐阅读