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

 
发布了24 篇原创文章 · 获赞 5 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/cdbqss1/article/details/1547228