//--------------------环形链表 //#include <windows.h> //#include <iostream> //using namespace std; // //#define R 40//人数 //#define N 4//每隔多少删去一个节点 // //struct node //{ // int id; // node *next; //}; // //void initCircle(node *phead, int num) //{ // node *temp = phead; // for (int i = 1; i <= num; i++) // { // node *pnode = new node(); // pnode->id = i; // temp->next = pnode; // temp = pnode; // } // temp->next = phead->next; //} // // //void fun(node *head) //{ // node *temp = head->next; // for (int i = 0; i < R-1 ; i++)//删除N-1个 // { // for (int j = 0; j < N - 2; j++)//每N-2个删一个 // { // temp = temp->next; // } // cout << temp->next->id << " -> "; // temp->next = temp->next->next; // temp = temp->next; // } // cout << "\n\n"; // cout << temp->id << " 生存 " << endl; // cout << endl; //} // //void main() //{ // node *head = new node; // initCircle(head, R); // fun(head); // cout << "\n"; // system("pause"); //} //----------------递归 #include <windows.h> #include <iostream> using namespace std; #define N 30 //人数 #define R 3 //每隔多少删除 int a[N] = { 0 }; int flag = 1; void fun(int id, int num) { if (id == N-1) { return; } else { int times = 0;//记录非0个数,到三个结束while while (1) { //循环遍历 if (id < N) { if (a[id] == 0) { times++; } id++; } else { id -= N; } if (times == num) { id--;//由于多加了一次 break; } } a[id] = flag++; for (int i = 0; i < N; i++) { cout << a[i] << " "; } cout << endl; system("pause"); fun(id + 1, num); } } void main() { fun(0, R); cout << endl; system("pause"); }
时间: 2024-10-14 05:09:28