问题:一家公司招聘候选人,让他们围成一圈。他们选择每隔一个候选人,然后他离开圈子(因此圈子越来越小),直到只剩下 1 个。所以,如果有 5 个人,它会像:-
1 2 3 4 5
1 3 4 5 (2 is selected)
1 3 5 (4 is selected)
3 5 (1 is selected)
3 (3 is left, does'nt get the job!)
Jhon 一个过于聪明的家伙不想成为这家恶意公司的一部分。
如果他知道总共有560人,他会站在哪里。 Ans :我尝试制作一个程序,您可以在其中输入 n(候选人数量),它会打印一个未选中的席位的值。
我使用循环链表和删除。
请多多包涵,因为我对编码还很陌生。
我的程序适用于输入 2、4、8、16、32、64 等等,因为所有这些都是 1。但是任何其他输入都不起作用。
#include <iostream>
using namespace std;
struct node
{
node* ptr;
int data;
}start;
int main()
{
node *start=NULL;
int n;
cout<<"Enter the number of students : ";
cin>>n;
node *temp=new node;
temp->data=1;
temp->ptr=NULL;
start=temp;
for(int x=2;x<=n;x++)
{
node* temp1=new node;
temp1->data=x;
temp->ptr=temp1;
temp1->ptr=start;
temp=temp1;
}
node* temp2=start;
do
{
cout<<temp2->data<<" ";
temp2=temp2->ptr;
}while(temp2!=start);
cout<<endl;
//delete bigins here
temp2=start;
node* temp3=temp2->ptr;
do
{
temp2->ptr=temp3->ptr;
temp3->ptr=NULL;
delete temp3;
temp2=temp2->ptr;
temp3=temp2->ptr;
}while(temp2->ptr!=start);
temp2=start;
do
{
cout<<temp2->data<<" ";
temp2=temp2->ptr;
}while(temp2!=temp3);
cout<<endl;
}