C++作业:n只猴子围成一圈,顺时针方向从1到n编号

来源:互联网 发布:excel表格重复的数据 编辑:程序博客网 时间:2024/05/20 18:03
/* 邵发, 1309班,  *//*作业07, 练习2n只猴子围成一圈,顺时针方向从1到n编号。之后从1号开始顺时针方向让猴子从1到m依次报数,凡报到m的出圈,取消资格。下一位再从1开始依次报数,报出m者出圈,最后剩下的就是猴王。问这个猴王原序排在第几位。*/#include <stdio.h>#include <stdlib.h>// 成员结点typedef struct __Node{int id;struct __Node* next; }Node;int Play(int n, int m){// 链表长度:n// 构造循环链表Node* lst = (Node*)malloc(sizeof(Node)*n);int i;for(i=0; i<n; i++){lst[i].id = i+1;if(i+1 == n)lst[i].next = &lst[0];elselst[i].next = &lst[i+1];}// 开始玩Node* cur = &lst[0]; // 当前Node* prev = &lst[n-1]; // 上一个int count = 0;while(prev != cur) //  只剩一个{count ++;if(count == m) // 数到m个{count = 0;// 移除当前结点prev->next = cur->next;cur = cur->next;}else{// 下一位prev = cur;cur = cur->next;}}// 剩下的是胜者int winner = cur->id;free(lst); // 释放内存return winner;}int ex07_02(){int winner = Play(5, 2);printf("winner is %d . \n", winner);return 0;}

原创粉丝点击