首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

MS的一道面试题~(圆圈上顺时针排列着1,2,3,2000 这2000个数)解决思路

2012-03-21 
MS的一道面试题~(圆圈上顺时针排列着1,2,3,....2000 这2000个数)easy从开始,你做个例子,会发现3剩余是2,4

MS的一道面试题~(圆圈上顺时针排列着1,2,3,....2000 这2000个数)
easy
从开始,你做个例子,会发现3剩余是2,4剩余是4,5剩余是2,6剩余4,,,,,,这不就发现问题了.

我想应该是     4   吧



[解决办法]
其实就是(2n + 1)*2^0的形式
n就为0
然后按照少去的数以1/2来算
也就是
2000 (2n + 1)*2^0
1000 (2n + 1)*2^1
500 (2n + 1)*2^2
250 (2n + 1)*2^3
125 (2n + 1)*2^4
63 (2n + 1)*2^5
37 (2n + 1)*2^6
19 (2n + 1)*2^7
10 (2n + 1)*2^8
5 (2n + 1)*2^9
3 (2n + 1)*2^10
最后一个数就是(2n + 1)*2^10 ==所以是1024
[解决办法]
汗.............还有人在争论!!!!!
#include <stdio.h>
#define M 2000
#define N 2
int main()
{
int data[M] ;
int i=0 ;
int left = M ;
int cur = 0 ;
for(i=0; i <M; i++)
data[i] = 1 ;
i=0;
while(left > 1)
{
if(data[i])
{
if(++cur == N)
{
cur = 0 ;
data[i] = 0 ;
if(i==0)
i=M;
printf( "output %d.\n ", i) ;
left-- ;
}
}

i = (++i)%M ;
}
for(i=0; i <M; i++)
if(data[i])
{
if(i==0)
i=M;
printf( "output %d.\n ", i) ;
}
return 0 ;
}
答案:1952

热点排行