白白白小白 2016-03-09 11:10 采纳率: 100%
浏览 1651

【java算法题】凑凑凑凑凑凑字数

题目:标题:猜字母  
 把abcd...s共19个字母组成的序列重复拼接106次,得到长度为2014的串。  
 接下来删除第1个字母(即开头的字母a),以及第3个,第5个等所有奇数位置的字母。  
得到的新串再进行删除奇数位置字母的动作。如此下去,最后只剩下一个字母,请写出该字母。
/-----------------------------------
从百度知道查看但是不懂 1024 和他的思维
求大神解惑

/-----------------------------------
就是第1024位置的字母"q"
第一次留下的是2的倍数,第二次留下的是4的倍数,第三次就是8的倍数。

代码的话,只要一句话。

return ('a' + 1024%19-1);

  • 写回答

1条回答 默认 最新

  • cxsmarkchan 2016-03-09 11:31
    关注

    你是对1024的那个解释不理解吗?
    我们考虑第i个元素,设: i = k * 2 ^ m (k乘以2的m次方,k是奇数,也就是把i分解成奇数乘以2的幂)。
    假设m大于等于1,则i是偶数。因此,在第一次筛选中,它没有被删去。
    第1次筛选后,i所在的位置应该是变成了原来的一半,即k * 2 ^ (m - 1)
    如果m - 1仍然大于等于1,则i所在的位置仍然是偶数,不会被删去,筛选后,其位置为k * 2 ^ (m - 2)
    以此类推,直到第m次筛选后,i所在的位置变成了k,而k是奇数。因此在第m+1次筛选时,i会被删去。
    这样就很清楚了,一个数什么时候被删去,取决于它的因子里有多少个2,有最多2的,最后被删去。
    而1024 = 2 ^ 10,这是含2最多的。

    评论

报告相同问题?

悬赏问题

  • ¥20 关于#qt#的问题:Qt代码的移植问题
  • ¥50 求图像处理的matlab方案
  • ¥50 winform中使用edge的Kiosk模式
  • ¥15 关于#python#的问题:功能监听网页
  • ¥15 怎么让wx群机器人发送音乐
  • ¥15 fesafe材料库问题
  • ¥35 beats蓝牙耳机怎么查看日志
  • ¥15 Fluent齿轮搅油
  • ¥15 八爪鱼爬数据为什么自己停了
  • ¥15 交替优化波束形成和ris反射角使保密速率最大化