【求助】看看这个程序的时间复杂度是多少?
任务:一堆猴子都有编号,编号是1,2,3 ...m ,这群猴子(m个)按照1-m的顺序围坐一圈,从第1开始数,每数到第N个,该猴子就要离开此圈,这样依次下来,直到圈中只剩下最后一只猴子,则该猴子为大王#include <stdio.h>
#include <stdlib.h>
void choose(int a,int b);
struct LNode
{
int data;
struct LNode *next;
};
void choose(int a,int b)
{
struct LNode *head;
struct LNode *p;
struct LNode *q;
int i,j;
//建循环链表
head=(struct LNode *)malloc(sizeof(struct LNode));
head->data=1;
q=head;
for(i=2;i<=a;i++)
{
p=(struct LNode *)malloc(sizeof(struct LNode));
p->data=i;
q->next=p;
q=p;
}
q->next=head;
p=q;
printf("猴子被淘汰的顺序为:\n");
for(i=1;i<a;i++) //循环a-1次,剩下一个节点就为大王
{
for(j=2;j<=b;j++) //循环一次就删除一个节点
p=p->next;
q=p->next;
printf("%d 号出局\n",q->data);
p->next=p->next->next; //断链连链
free(q);
}
printf("大王是:%d号\n",p->data);
}
void main()
{
int n,m;
printf("请输入猴子数目m:");
scanf("%d",&m);
printf("请输入出队猴子报的数n(n<m):");
scanf("%d",&n);
if(n>=m)
printf("输入有错,退出!\n");
else
choose(m,n);
}