选举方法是让150名同学排成一排,由第一名开始报数,报奇数的同学落选退出队列,报偶数的同学站在位置不动,然选举方法是让159名同学排成一排,由第一名开始报数,报奇数的同学落选退出队列,
来源:学生作业帮助网 编辑:六六作业网 时间:2024/11/21 21:03:19
选举方法是让150名同学排成一排,由第一名开始报数,报奇数的同学落选退出队列,报偶数的同学站在位置不动,然选举方法是让159名同学排成一排,由第一名开始报数,报奇数的同学落选退出队列,
选举方法是让150名同学排成一排,由第一名开始报数,报奇数的同学落选退出队列,报偶数的同学站在位置不动,然
选举方法是让159名同学排成一排,由第一名开始报数,报奇数的同学落选退出队列,报偶数的同学站在位置不动,然后再从头报数,如此继续下去,最后剩下的一名当选,小胖想去,他在第一次排队时应该站在队列的什么位置上才能被选中?
选举方法是让150名同学排成一排,由第一名开始报数,报奇数的同学落选退出队列,报偶数的同学站在位置不动,然选举方法是让159名同学排成一排,由第一名开始报数,报奇数的同学落选退出队列,
思路.
159个人,79个在偶数位,80个在奇数位.
奇数位除去,剩79人.
这79人每人的序号都是当前的序号乘2.
有39个偶数位,40个奇数位.
除掉奇数位.这里的奇数位,都能被2整除,偶数位都能被4整除.
那么现在剩下的就是4 8 12 16 20.156 39个数
继续.19个“偶数”,20个“奇数”,除去.
剩下8的倍数.8 16 24 32 40.152 19个数
继续.9个,10个,除去.
剩下16的倍数,16 32 48 64 80.144 9个
继续.4,5,除去.
剩32的倍数.
32 64 96 128
剩4个了.
再除去1 3 位.
剩64 128
于是,答案128.
这个问题其实想一想比较浅显的.
奇数个数,第一次除去所有奇数,必然剩下奇数个偶数.
剩下的偶数顺次填补奇数的位置,于是,偶数位的新位置就都是原先位置的二分之一位置.
现在重复这个步骤,还是上述的原则,那么新的剩下的数还是第一次位置被降成二分之一的偶数.那么当前这次又降了二分之一的位置,合起来是四分之一了.
想必楼主你也发现了,按照这个原则,每次删除奇数位,剩下的数的位置一定都会缩减二分之一,那么最终没被删的那个数的位置缩减了多少,显而易见,删除了n次,就缩减了二分之一的n次方.
那么最后那个没删的数的位置是多少?不用想,肯定是第一位.
那么 为了好理解 我们可以设x没被删.
于是 x * (1/2)^n = 1
解出来 x = 2^n
现在问题变成了,159里有多少个2?这样说可能不够确切,通俗的讲就是 159能被二分多少次?
答案一定是比159小,且离159最近的那个2的幂.于是 128出现了.楼主同样可以试试,159除以2 保留整数,一直除,一定是7次.
答案是128.
这是大脑想的 一边想一边敲进来了,个人认为应该是对的.
如果楼主实在想验证又懒得手动,Hi我,我写个程序模拟一下.
哎,我可能患强迫症了.写了个程序,验证了我的想法.
模拟人脑一点一点划的话,程序比较麻烦,于是我就先删13579,删2 6 10,这样一直来.
代码如下,C语言和C++混合代码,C++忘得差不多了,就这样吧.
#include
int main(void)
{
int a[200];
for(int i=1 ; i