为什么内存运用错run time erro 很多数据都行但是先一组3,2 在一组5,1会卡主怎么回事
猴子选大王 Time Limit:1000ms Memory Limit: 65535K
Submited:72 Accepted:25
Description
有m个猴子围成一圈,每个有一个编号,编号从1到m。打算从中选出一个大王。经过协商,决定选大王的规则如下:从第一个开始报数,报到n的猴子出圈,紧接着又从1循环报数,最后剩下来的就是大王。
Input
第一行是一个正整数T表示测试数据的组数。下面共有T行,每行两个整数m和n,用一个空格隔开,分别表示猴子的个数和报数n。1<=m<=100,1<=n<=200。
Output
每组数据对应有一个输出,表示大王的编号。
Sample Input
1
3 2
Sample Output
3
Hint
很多数据都行但是先一组3,2 在一组5,1会卡主怎么回事
#include <stdio.h>
#include <malloc.h>
struct quan{
int num;
struct quan * next;
};
void main()
{
int j,k;
scanf("%d",&j);
for(k=1;k<=j;k++)
{
int n,num,i;
struct quan **p,**q;
struct quan quan1;
*p=&quan1;
scanf("%d %d",&n,&num);
for(i=1;i<=n;i++)
{
(*p)->num=i;
if(i==n)
break;
(*p)->next=(struct quan *)malloc(sizeof(struct quan));
*p=(*p)->next;
}
(*p)->next=&quan1;
*q=*p;
*p=&quan1;
while((*p)->next!=(*p))
{
for(i=1;i<num;i++)
{
*q=*p;
*p=(*p)->next;
}
(*q)->next=(*p)->next;
free(*p);
*p=(*q)->next;
}
printf("%d\n",(*p)->num);
}
}