霍天青 2015-06-16 06:23 采纳率: 100%
浏览 1552
已采纳

请大家看看这段代码怎么改进(我想养成好的编程习惯)。谢谢。

题目见图片。
下面是代码(这道题当然还有其他解法,我这里是刻意用链表做的)
{图片说明
#include
#include
typedef struct monkey{
int num;
struct monkey * next;
} M;
void game(int, int, int);
M create_list(M *,int );
int main(void)
{
int n;
scanf("%d", &n);
int i;
for (i = 1; i <= n; i++)
{
int n, m, p;
scanf("%d %d %d",&n, &m, &p);
game(n, m, p);
}
return 0;
}
void game(int n, int m, int p)
int j = 1;
M *headp = (M *)malloc(sizeof(M)),*tail;
tail=create_list(&headp,n);//创建大小为n的环状链表,返回尾节点
M *now = headp,*before=tail;
while (now->num != p)//定位到值为p的节点
{
before = now;
now = now->next;
}
while (n - 1)//进行n-1次游戏
{
int cnt = m - 1;
while (cnt)//定位到下一个被淘汰的猴子
{
before = now;
now = now->next;
--cnt;
}
M *temp = now;
before->next = now->next;
now = now->next;
free(temp);//删除被淘汰的猴子,定位到下一个
--n;
}
printf("%3d\n", now->num);//最后还剩一个猴子
}
M *create_list(M **head,int n)
{
M *temp = *head;
int i=1;
while (i !=n)//n个节点,依次赋值1,2....n
{
temp->num = i++;
temp->next = (M *)malloc(sizeof(M));
temp = temp->next;
}
temp->num = n;
temp->next = *head;
return temp;
}

  • 写回答

2条回答 默认 最新

  • beaconD 2015-06-16 06:38
    关注

    你想看什么?编写规范还是执行效率?

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来