VFP趣味编程:求婚者的智慧

古代一个王国的公主爱上了花匠。公主要出嫁按传统要用抛绣球的方式选择附马。花匠就给公主献了个对策。婚日来临,人群拥挤,主持人叫求婚者排成一行,花匠在队列外数了数,共有101个人,于是他找了个适当的位置也站在了队伍中。主持人喊1212地报数,报单数的退出场外;余下的人靠拢又成一行,再重新1212地报数,报单数的退出场外;如此下去最后只剩一下,公主便嫁给谁。当然,最后剩下的是花匠。请问花匠站在原队伍中的哪一个位置?

算法分析:求婚的总人数是102人;第一遍报数后,退出场的是1,3,5,7...51人,也就是20次方分别乘以1,3,5...

第二遍报数后,退出场的是原队伍中的2,6,10.. 21次方分别乘1,3,5

第三遍报数后,退出场的就是22次方分别乘以1,3,5..  所以,源程序ex11_1.prg如下:



SET TALK OFF
CLEA
CLEA ALL
rs
= 102
DIME a(rs)
FOR i
= 1  TO rs
  a(i)
= i
ENDFOR
STOR 
0  TO ip,N
DO WHILE .T.
  k
= 0
  FOR i
= 1  TO rs
    IF a(i)
= 0
      LOOP
    ENDIF
    k
= k + 1
    IF k
= INT(k / 2 ) * 2
      LOOP
    ENDIF
    m
= a(i)
    a(i)
= 0
    N
= N + 1
  ENDFOR
  IF N
= rs
    
?   " 共报了 " + STR(ip) +   ;
      
" 次数,花匠站在原队伍第 " +  ;
       STR(m)
+ " 个位置 "
    RETU
  ENDIF
  ip
= ip + 1
ENDDO
RETU

 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值