zoukankan      html  css  js  c++  java
  • 用Matlab完成:从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。

    程序思路:

    (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

  • 相关阅读:
    批量更新sql |批量update sql
    智力测试题3
    【管理心得之二十一】管得少就是管得好
    查看sqlserver被锁的表以及如何解锁
    AD域相关的属性和C#操作AD域
    毕业5年小结一下
    WPF版公司的自动签到程序
    用友畅捷通高级前端笔试题(一)凭借回忆写出
    .NET中制做对象的副本(三)通过序列化和反序列化为复杂对象制作副本
    .NET中制做对象的副本(二)继承对象之间的数据拷贝
  • 原文地址:https://www.cnblogs.com/cxmhy/p/4094415.html
Copyright © 2011-2022 走看看