约瑟夫问题 环形链表及递归

//--------------------环形链表
//#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");
}

 

你可能感兴趣的:(约瑟夫问题 环形链表及递归)