求解C++题目???

来源:百度知道 编辑:UC知道 时间:2024/05/18 07:01:45
任务:一堆猴子都有编号,编号是1,2,3 ...m ,这群猴子(m个)按照1-m的顺序围坐一圈,从第1开始数,每数到第N个,该猴子就要离开此圈,这样依次下来,直到圈中只剩下最后一只猴子,则该猴子为大王。
输入数据:输入m,n m,n 为整数,n<m
输出形式:中文提示按照m个猴子,数n 个数的方法,输出为大王的猴子是几号 ,建立一个函数来实现此功能

其实这个是约瑟夫问题。
#include <stdio.h>
#include <iostream.h>
#include <malloc.h>
#include <stdlib.h>
#include <string.h>

struct node_t
{
int num;
struct node_t *next;
};

node_t *create(int n);

node_t* create(int n)
{
node_t *head = NULL;
if(n > 0)
{
int id = 1;
node_t * pnewnodes = NULL;
pnewnodes =(node_t *)malloc(n * sizeof(node_t));
if(pnewnodes == NULL)
return NULL;
else
memset(pnewnodes,0,n*sizeof(node_t));
head = pnewnodes;
for(;id < n;id ++)
{
pnewnodes->num = id;
pnewnodes->next = pnewnodes+1;
pnewnodes = pnewnodes->next;
}
pnewnodes->num = n;
pnewnodes->next = head;
}
return head;
}

//josephus函数实现要求的功能

int josephus(int m,int n)
{
node_t *plist;
node_t *piter;<