由1到 N组成的环,是3的倍数就删除,直到剩余一个。 用链表解决
#include <iostream>
#include <algorithm>
#include <iterator>
using namespace std;
typedef struct node
{
int data;
struct node *next;
}node;
/*node *init()
{
node *p = (node*)malloc(sizeof(node));
p->next = NULL;
return p;
}*/
int main()
{
int n ;
cin>>n;
node *head ;
node *p,*q;
q = (node*)malloc(sizeof(node));
q->data = 1;
q->next = NULL;
head = q;
p = q;
for(int i = 2; i <= n; i++)
{
q = (node*)malloc(sizeof(node));
q->data = i;
q->next = NULL;
p->next = q;
p = q;
if(i == n)
{
q->next = head;
}
}//主要是形成环状链表
p = head;
int i = 1;//从自己开算算第一个 只要经过两次next就删掉数据
//cout<<p->data<<endl;
while(p->next != p)//剩余一个的时候,肯定是自己指向自己
{
q = p;
p = p->next;
// cout<<p->data<<endl;
i++;
if(i % 3 == 0 )
{
q->next = p->next;
p = q->next;
i = 1;//从自己开算算第一个
}
}
cout<<p->data;
return 0;
}
如图所示,当输入六的时候,4是最后剩余的哪一个
|