microsoft
的一道题:圆圈上顺时针排列着
1,2,3,....2000
这
2000
个数
.
从
1
开始
,
顺时针隔一个拿走一个
(1
最先被拿走
,
下一个是
3
被拿走
).
问最后剩下是哪一个数字
.
正确答案为
1952
下为实现的程序:
struct team//
数据链
{ int data;
team * next;
}Team;
void initiation(team* head)//
初始化
{
team* aa=head;
int temp;
for(temp=1;temp<2000;temp++)//
数值为
1-2000
{
aa->data=temp;
aa->next=new team;
aa=aa->next;
}
aa->data=temp;
aa->next=head->next;//
组成一个环
,
此时顺便取出第一个数
}
void main(int argc, char* argv[])
{
team* p=&Team;
initiation(p);
while(p!=p->next)
{
cout<<p->data<<" ";
team* temp=p->next->next;//(1)2(3)4(5)6
括号里为取出的数
p->next->next=p->next->next->next;
p=temp;
}
cout<<endl<<p->data<<endl;
}
屏幕输出为:
屏幕输出为:
![](https://p-blog.csdn.net/images/p_blog_csdn_net/lzyblog/4ce0708addd34ef8a0f00d66bef18aba.png)
![](https://p-blog.csdn.net/images/p_blog_csdn_net/lzyblog/923bb2bfea02405b82b163edf64a0d25.png)
![](https://p-blog.csdn.net/images/p_blog_csdn_net/lzyblog/daedd018ff124691a93dbcea6b5b59d5.png)
![](https://p-blog.csdn.net/images/p_blog_csdn_net/lzyblog/28c3ec57810e4f278b68541d1c8bb516.png)