原帖由 lknh17 于 2006-12-5 03:21 发表
1024吗?
原帖由 franklmin 于 2006-12-4 20:54 发表
1024
第一次 拿走 1,3,5,7。。。。。。1999,剩下 2,4,6,8。。。。2000,下一次从 2 开始
第二次 拿走 2,6,10。。。。。。1998(拿走的数%2=0,%4=2),剩下 4,8,12,16,20。。。。。。2000,下一次 ...
原帖由 tyc611 于 2006-12-5 13:14 发表
我的想法有点笨,不过也说说,大家集思广益嘛
最初的序列为:1,2, 3, 4, ..., 1999, 2000(总数为偶数)
第一次取掉所有奇数,即剩下(2, 4, 6, ..., 1998, 2000) = 2 * ( 1, 2, 3, ..., 999, 1000)( ...
原帖由 jronald 于 2006-12-5 13:26 发表
1952正确
原帖由 jronald 于 2006-12-5 00:45 发表
圆圈上顺时针排列着1,2,3,....2000 这2000个数. 从1开始,顺时针隔一个拿走一个(1最先被拿走,下一个是3被拿走). 问最后剩下是哪一个数字.
原帖由 zwylinux 于 2006-12-6 00:09 发表
这个和约瑟夫问题有什么区别没?
原帖由 灰色骆驼 于 2006-12-6 00:17 发表
就是约瑟夫环
原帖由 xxandxx 于 2006-12-5 20:31 发表
1952
int fun(int n)
{
int first=1, last=n, i;
int *b = (int *)malloc(2*n*sizeof(int));
for (i = 1; i <= n; ++i)
b = i;
while(last-first != 1) {
...
原帖由 xxandxx 于 2006-12-5 20:31 发表
1952
int fun(int n)
{
int first=1, last=n, i;
int *b = (int *)malloc(2*n*sizeof(int));
for (i = 1; i <= n; ++i)
b = i;
while(last-first != 1) {
...
原帖由 xxandxx 于 2006-12-5 20:31 发表
1952
int fun(int n)
{
int first=1, last=n, i;
int *b = (int *)malloc(2*n*sizeof(int));
for (i = 1; i <= n; ++i)
b = i;
while(last-first != 1) {
...
原帖由 qlks 于 2006-12-6 17:48 发表
如果fun(5)
为什么得到的是2?
不是第二次应该是4?
原帖由 crspo 于 2006-12-7 12:02 发表
(2000循环左移1)-1=1952
2000: 11111010000
2000循环左移1:11110100001
2000循环左移1-1:11110100000=1952
原帖由 tyc611 于 2006-12-7 12:19 发表
赞一个先!能说下为啥吗?
原帖由 crspo 于 2006-12-7 12:02 发表
(2000循环左移1)-1=1952
2000: 11111010000
2000循环左移1:11110100001
2000循环左移1-1:11110100000=1952
原帖由 jronald 于 2006-12-5 00:45 发表
圆圈上顺时针排列着1,2,3,....2000 这2000个数. 从1开始,顺时针隔一个拿走一个(1最先被拿走,下一个是3被拿走). 问最后剩下是哪一个数字.
原帖由 天行健!! 于 2006-12-8 15:38 发表
最后一个值是1952。
下面是我的推理:
(1:第一步是去掉所有奇数,即剩下2,4,6,8~~~~2000。
(2:将所有数除2,得到1,2,3~~~~1000。因上一步最后一个数未被取走,所以仍从“1”开始取。
(3:剩下2,4,6~~~1000。同理除以2得到1,2,3,4~~~500。上一步最后一个数(即最大的数)“1000”未被取走,所以仍从“1”开始取(这点很重要,若最后一个数被取走,则不能从最小的数开始取)。
(4:剩下2,4,6~~~500。同理除以2得到1,2,3,4~~~250。仍从“1”开始取。
(5:剩下2,4,6~~~250。同理除以2得到1,2,3,4~~~125。仍从“1”开始取。
(6:剩下2,4,6~~~124。同理除以2得到1,2,3,4~~~62。因为上一步最后一个数(即最大的 数)“125”被取走,所以这次要从2开始取(因为要隔一个取一次)。即这次顺序为:2,3, 4~~~62,1(注意这里最后一个为1)。
(7:剩下3,5,7~~~~61,1。所有数加1除2,得到2,3~~~~31,1。因为上一步最后一个数“1”未被取走,所以这次要从2开始取,即这次顺序为:2,3,4~~31,1。
(8:剩下3,5,7~~31。所有数减1除2,得到1,2,3~~~~15。因为上一步最后一个数“1”被取走,所以这次也要从2开始取,即这次顺序为:2,3,4~~15,1。
(9:剩下3,5,7~~15。所有数减1除2,得到1,2,3~~~~7。因为上一步最后一个数“1”被取走,所以这次也要从2开始取,即这次顺序为:2,3,4~~7,1。
(10:剩下3,5,7。因为上一步最后一个数“1”被取走,所以这次要从5开始取,剩下7。
(11:把7还原,即做以上各步的反运算:{[(7*2+1)*2+1]*2-1}*2*2*2*2*2=1952
写的不是很清楚,还请见谅!
(2000循环左移1)-1=1952
2000: 11111010000
2000循环左移1:11110100001
2000循环左移1-1:11110100000= ...
crspo 发表于 2006-12-07 12:02
欢迎光临 Chinaunix (http://bbs.chinaunix.net/) | Powered by Discuz! X3.2 |