时间限制:1000MS 代码长度限制:10KB
提交次数:0 通过次数:0
题型: 编程题 语言: G++;GCC;VC
Description
有n个人围成一圈,从第1个人开始报数1、2、3,每报到3的人退出圈子。编程使用链表找出最后留下的人。
输入格式
输入一个数n,1000000>=n>0
输出格式
输出最后留下的人的编号
输入样例
3
输出样例
2
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 1e6;
int a[N];
int main()
{ ios::sync_with_stdio(0),cin.tie(0);
int n;
cin>>n;
if(n==1)
{
cout<<'1';return 0;
}
for(int i=0;i<n-1;i++)
a[i]=i+1;
a[n-1]=0;
int pre,cur=n-1;
for(int i=0;i<n;i++)
{
for(int j=0;j<3;j++)
{
pre=cur; //s=p
cur=a[cur];//p=p->next
}
a[pre]=a[cur];//s->next=p->next -----delete p
}
cout<<pre+1;//初始编号都少1,pre为删除元素上一个编号-1
return 0;
}