اعداد را در ارایه گرفته عدد اول را حذف کرده وبه ترتیب یکی درمیان حذف کند تا فقط یک عدد باقی بماند
Printable View
اعداد را در ارایه گرفته عدد اول را حذف کرده وبه ترتیب یکی درمیان حذف کند تا فقط یک عدد باقی بماند
یکم میشه بیشتر راجع به این الگوریتم ژوزف توضیح بدی؟
منظورتان همان مسئله معروف ژوزفوس است؟اگر حدس من دست باشد و اين همان مسئله باشد پس شما صورت مسئله را اشتباه نوشتيد
سلام مهناز خانم اگه کد به هم ریخته شده فقط کافیه کپی کنی و توی notpad پیست کنی مشکلش حل میشه
#include <iostream.h>
clrscr();
class Node {
int id;
Node *next;
Node (int i, Node *n=0): id(i), next(n) { }
friend class List;
};
class List {
Node *last;
public:
List ( ): last(0) { }
void addNode (int i);
void skipAndRemove (int delta);
void print ( );
};
void List::addNode (int i) {
if (!last) {
last=new Node(i);
last->next=last;
}
else {
Node *temp=new Node(i, last->next);
last->next=temp;
last=temp;
}
}
void List::skipAndRemove (int delta) {
if (delta>1) {
last=last->next;
skipAndRemove(delta-1);
}
else if (last->next==last) {
cout << last->id << ':' << endl;
delete last;
last=0;
}
else {
cout << last->next->id << ':' << endl;
Node *temp=last->next;
last->next=last->next->next;
delete temp;
}
}
void List::print ( ) {
if (!last) return;
for (Node *temp=last->next; ; temp=temp->next) {
cout << '\t' << temp->id;
if (temp==last) break;
}
cout << endl;
}
void main ( ) {
const int size=9, delta=5;
List list;
for (int j=1; j<=size; j++)
list.addNode(j);
list.print( );
for (int k=1; k<=size; k++) {
list.skipAndRemove(delta);
list.print( );
}
}
اگه کار کرد فقط یه چیز ازت می خوام یه مشکل بزرگ تو زندگیم دارم دعام کن همین.یا علی
سلام من برنامشو میخوامنقل قول:
دوستان میشه یکی لطف کنه برنامه ژوزف رو به زبان ++C توی انجمن قرار بده؟