22/10/2020, 22:36

Bài toán Josephus nâng cao

Trong bài toán Josephus, một nhóm binh sĩ bị kẻ thù bao vây và một binh sĩ được chọn
để đi cầu cứu. Việc chọn thực hiện như sau: Một số nguyên n và một binh sĩ được chọn
một cách ngẫu nhiên. Các binh sĩ được sắp theo vòng tròn, và họ đếm bắt đầu từ binh sĩ
được chọn ngẫu nhiên. Khi đạt đến n, binh sĩ tương ứng này được lấy ra khỏi vòng và
việc đếm lại bắt đầu từ binh sĩ tiếp theo. Quá trình này cứ tiếp tục cho đến khi chỉ còn
một binh sĩ. Đó là người sẽ được chọn để đi cầu cứu. Cần cài đặt cách chọn này và tìm ra
binh sĩ sẽ được chọn. bài toán được thêm vào yêu cầu hãy truyền thêm tham số là bước nhảy để người 

binh sĩ muốn là được là người đi cầu cứu.

code của e mn giúp e sửa chữa với ạ.

void josephus(int n, int m, int k) // n là sl người , m là vt đc chọn ra khỏi đầu tiên , k là bước nhảy.
{
node* p = new node();
 
p->info = 1;//  giá trị của node đầu
node* tam = p;
 
for (int i = 2;i<=n; i++) 
{
p->next = new node();
p = p->next;
p->info = i;
}
p->next = tam;
cout << "Nguoi loai ra khoi vong tron\t";
while (p != p->next)// tìm VT cần lấy ra
{
for (int i = 0; i <= n; i+=k)
p->next;
tam = p->next;
cout << p->next->info;
p->next = p->next->next;
delete tam;
}
cout << "\n Vi Tri Cuoi Cung La :"<<p->info;
delete p;
}
Bài liên quan
0