Вопрос: Компания нанимает кандидатов, заставляет их сидеть по кругу. Они выбирают каждого второго кандидата, и он покидает круг (при этом круг становится все меньше), пока остается только 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 и т. Д., Как и во всех этих случаях. Но любой другой вход и он не работает.
#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;
}
Попробуйте пересмотреть алгоритм для кругового связанного списка. – user1929959