您的位置:

猴子选大王c语言pta,猴子选大王c语言数组

本文目录一览:

C语言 猴子选大王 高手纠错啊。。。。。。

#includestdio.h

#includemalloc.h

int main()

{

struct king{

int data;

struct king *next;

};

int i,m,n;

scanf("%d%d",n,m);

struct king *p,*head,*t,*tmp;

head=(struct king*)malloc(sizeof(struct king));

head-next=NULL;

head-data=1;

p=head; //循环链表

for (i=2;i=n;i++)

{

t=(struct king*)malloc(sizeof(struct king));

t-data=i;

t-next=NULL;

p-next=t;

p=p-next;

}

p-next=head;

p=head; //删除链表

while(p-next!=p)

{

for(i=1;im-1;i++)

p=p-next;

tmp=p-next;

p-next=p-next-next;

p=tmp-next;

free(tmp);

}

printf("%d",p-data);

getchar();

getchar();

return 0;

}

//

p=tmp-next;

你那个是指向下下个节点了

求高手帮忙调试一下“猴子选大王C语言代码”诚谢!本人新手学C语言

#include stdio.h

#define SHUMU 10

void main()

{

int i=0, weizhi=0,shumu=10;

int houzi[SHUMU]={1,1,1,1,1,1,1,1,1,1};

while(shumu1)

{

i=1;

while(i6)

{ weizhi++;

if(weizhi9) weizhi=weizhi-10;

if(houzi[weizhi]=1) i++;

}

houzi[weizhi]=0;

shumu--;

}

i=0;

while(i10)

{

printf("第%d只猴子是大王\n", i);

i++;

}

}

C数组猴子选大王

这是运行结果 需要的话给我个邮箱

/*

结果:

------------------------

**********猴子竞选大王*********

--请输入猴子的总数num = 10

按顺时针方向就坐的猴子编号依次是:

猴子1 猴子2 猴子3 猴子4 猴子5 猴子6 猴子7 猴子8 猴子9 猴子10

规定数字,报出这个数的猴子将被淘汰出局,这个数max_hao = 2

被淘汰出局的猴子依次是:

猴子2 猴子4 猴子6 猴子8 猴子10 猴子3 猴子7 猴子1 猴子9

竞选结果:

猴王:5

-----------------------------

*/

C 语言中关于猴子选大王的代码

注释写得很清楚 相信你能看懂 #include stdio.h

#include stdlib.h

#define MAXSIZE 100

typedef struct Node

{

int data;//存储猴子编号

struct Node *next;

}*List;

/* 用链表来得出大王的序号 */

int LinkedList(int num_monkey,int number);

/* 用顺序表来得出大王的序号 */

int SequenceList(int num_monkey,int number);

/* 创建循环单链表 */

List CreateList(int n);

void main()

{

int m, n, way, king;

printf("请输入猴子个数:");

scanf("%d", n);

printf("请输入要报的数:");

scanf("%d", m);

while (1)

{

printf("\n请选择解决问题的方法:\n");

printf("1.单链表\n");

printf("2.顺序表\n");

scanf("%d", way);

if (way == 1)

{

king = LinkedList(n,m);

break;

}

else if (way == 2)

{

king = SequenceList(n,m);

break;

}

else

{

printf("输入不合法!\n");

}

}

printf("%d号猴子是大王\n", king);

}

/* 创建循环单链表 */

List CreateList(int n)

{

int i;

List head, p;

head = (List)malloc(sizeof(struct Node));

head-next = head;

for (i = 1; i n; ++i)

{

p = (List)malloc(sizeof(struct Node));

p-next = head-next;

head-next = p;

}

p = head;

for (i = 0; i n; ++i)

{

p-data = i+1;

p = p-next;

}

return head;

}

/* 用链表来得出大王的序号 */

int LinkedList(int num_monkey,int number)

{

int i,j;

List head = CreateList(num_monkey);

List tail = head;//用来存储最后一个节点的地址

List out,p;//out指向要淘汰的节点,p指向其前一个节点

/* 让tail指向最后一个节点 */

for (i = 1; i num_monkey; i++)

{

tail = tail-next;

}

/* 淘汰的猴子个数比总个数少1,报数一轮就淘汰一个猴子,所以需要报数的轮数比

猴子总个数少1*/

for( i = 1; i num_monkey; i++ )

{

p = tail;

/* 让p指向要淘汰的猴子的前一个 */

for ( j = 1; j number; j++ )

{

p = p-next;

}

out = p-next;

/* 如果最后一个猴子被淘汰就更新尾节点 */

if (out == tail)

{

tail = p;

}

p-next = out-next;

printf("猴子%d淘汰\n", out-data);

free(out);//删除被淘汰猴子的节点

}

return p-data;

}

/* 用顺序表来得出大王的序号 */

int SequenceList(int num_monkey,int number)

{

/* 用来表示个猴子的信息,如果猴子出局就存储0,否则存储1。第一个元素不使用 */

int monkey[MAXSIZE];

/* 用来表示出局的猴子的序号 */

int out = 1;

/* 用来表示当前猴子的个数 */

int num_now = num_monkey;

int i,j;

for (i = 0; i num_monkey+1; i++)

{ /* 开始将每个元素置1 */

monkey[i] = 1;

}

/* 报数次数比猴子个数少一 */

for (i = 1; i num_monkey; i++)

{

out = 1;

/* 报数整个过程 */

for (j = 0; j number; j++)

{

/* 如果序号数大于猴子个数,表示循环了一圈,那么去掉那个圈数 */

if (out num_monkey)

out -= num_monkey;

/* 之前已经出局的猴子不参加报数 */

while(monkey[out] == 0)

{

out ++;

/* 如果序号数大于猴子个数,表示循环了一圈,那么去掉那个圈数 */

if (out num_monkey)

out -= num_monkey;

}

out++;

}

out--;//报完数后out应该是被淘汰的猴子的下一个,所以要向前移动

monkey[out] = 0;

printf("猴子%d淘汰\n",out);

}

while(monkey[out] == 0)

{

out ++;

/* 如果序号数大于猴子个数,表示循环了一圈,那么去掉那个圈数 */

if (out num_monkey)

out -= num_monkey;

}

return out;

}

c语言链表问题,猴子选大王,哪位大神能帮我看看

#include stdio.h

#include stdlib.h

typedef int status;

typedef int ElemType;

typedef struct NODE_MONKY

{

ElemType serial_number;

struct NODE_MONKY *next;

}LNode, *LinkList;

void Build(LinkList L,int n){

LinkList p,q;

p = L;

for(int i=0;in;i++)

{

printf("%d\n",i+1);

q = (LinkList)malloc(sizeof(LNode));

q - serial_number = i+1;

q - next = NULL;

p - next = q;

p = q;

}

p - next = L-next;

}

void Print(LinkList L,int x)//计算单链表的长度,然后输出单链表

{

    LinkList p;

    p=L-next;

    while(x--)

    {

        printf("%d ",p-serial_number);

        p=p-next;

    }

}

void Delete(LinkList L,int x,int y)//删除值为x的结点

{

    LinkList p,q;

p=L-next;

for (int i = 1; i  y; i++)

{

for(int j = 2; j  x ; j++)

{

p = p-next;

printf("serial_number change = %d\n",p-serial_number);

}

q = p-next;

        p-next = q-next;

        printf("delete %d success\n",q-serial_number);

        printf("p-serial_number = %d\n",p-serial_number);

        free(q);

        q = NULL;

        p = p-next;

        printf("p-serial_number now = %d\n",p-serial_number);

}

}

int main()

{

int m,n;

LinkList L,p,q;

L = (LinkList)malloc(sizeof(LNode));

L - next = NULL;

L - serial_number = 1;

printf("please input the number of mounky.\n");

scanf("%d",n);

Build(L,n);

Print(L,n);

printf("Please input the number M\n");

scanf("%d",m);

Delete(L,m,n);

}

猴子选大王,C语言描述 请相信解释我的代码!

给你原文做了注释。还不懂hi我

#include stdio.h

#includemalloc.h

typedef struct LNode

{

int num;

struct LNode *next;

}LNode, *LinkList; //定义结点

LinkList InitList(LinkList L,int n) //初始化循环链表

{

LinkList p,q;

int i;

L = (LinkList)malloc(sizeof(LNode)); //头结点

L-num = 1; //一号猴子

q=L;

for(i = 2; i = n; i++) //从二号猴子开始生成结点

{

p = (LinkList)malloc(sizeof(LNode));

p-num = i;

q-next=p;

q=p;

}

q-next = L; //使链表循环起来

return L;

}

void ListDelete_L(LinkList L,int n)

{

LinkList p,q;

int j=1; //j为计数器

p=L;

while(p-next!=p) //p-next=p时是只剩一个结点。

{

while(j!=n-1) //当j=n-1时应该将该结点的下一个结点删除。当就j!=n-1时就应该指针向后移,同时计数器加一

{

p=p-next;

j++;

}

q=p-next; //q即为被点到的猴子

p-next=p-next-next; //删除q结点

printf("%d\n",q-num);

free(q);//释放

j=0; //计数器清零,重新开始计数

}

printf("%d",p-num);//此时的结点就是大王

free(p);

}

int main()

{

LinkList L=NULL;

int n,m,e=0;

printf("请输入猴子个数:");

scanf("%d",m);

printf("请输入n值:");

scanf("%d",n);

if(mn){printf("m应该 大于n请重新输入");return 0 ;

}

L=InitList(L,m);

printf("出列的顺序为:");

ListDelete_L( L,n);

return 0;

}