zoukankan      html  css  js  c++  java
  • Pascal 语言中约瑟夫问题:幸运观众

    【题目】节目主持人准备从n名学生中挑选一名幸运观众,因为大家都想争当幸运观众,老师只好采取这样的办法:全体同学站成一列,由前面往后面依顺序报数。1,2,1,2……报单数的同学退出队伍,剩下的同学向前靠拢后,再重新由前往后1,2,1,2……报数,报单数者退出队伍,如此下去最后剩下一人为幸运观众。编程找出幸运观众,在原队列中站在什么位置上?(n由键盘输入,n<255)

    【上手】
    首先可以先打下草稿:这里假设有6位学生(出列学生用0代替)
    一开始的位置:[1]  [2]  [3]  [4]  [5]  [6]
    第一轮报数:     1   2    1     2    1    2
    第一轮筛选:     0  [2]    0   [4]   0   [6]
    第二轮报数:     0   1     0    2    0    1
    第二轮筛选:     0    0    0   [4]   0    0
    -------------------------------------------------------------------
    一开始我的思路是把非0的号码填充到0,后面想到可以直接提取所有非零号码直接代替原数组。
    代码如下:
      1. 1 for i:=1 to n do
        2 if a[i]<>0 then
        3 begin
        4 inc(j);
        5 b[j]:=a[i];
        6 end;
    这的确是一个方法但我个人觉得略显繁琐,那么我们再仔细看一看先前打的草稿,是不是发现了什么?
    对,我们可以直接调用 div 来重新报数:
    1. for i:=1 to n do a[i]:=a[i] div 2;
    是不是豁然开朗了呢?
  • 相关阅读:
    Codeforces Round #631 (Div. 1) B. Dreamoon Likes Sequences 题解(思维+求贡献)
    牛客练习赛66 C公因子 题解(区间gcd)
    evincevim控喜欢的pdf阅读器
    水手郑智化
    使用diskpart管理自己的分区
    Hacker's Browser
    How Browser Works
    解决vim ctags R失败的问题
    ubuntu更改登录对话框
    使用bcdedit删除多个Windows系统
  • 原文地址:https://www.cnblogs.com/RhinoC/p/4301965.html
Copyright © 2011-2022 走看看