[问题:]如果有 n个人围成一圈而坐,每个人的位置都带编号,编号从 1 到 n(没有重复的),从第一个位置开始数数,当数到 m时,那个人退出圈子,再从退出的那个人的下一个位置开始数(假定是顺时针数的),问最后一个退出的人编号是几?
int main(int *argv, char*argc[])
{
struct 人 {
int 编号;
char 姓名[10]; //char *姓名;
struct 人 *上一个;
struct 人 *下一个;
}表头, *浮标,*释放;
浮标 = &表头;
int n = 10; //人数
n个人围成一圈
int m = 12; //数到m
每次数m次
int 退出 = n - 1;
//
while (n)
//生成数据实体
{
n = n- 1;
struct 人* 人 = (struct 人*)malloc(sizeof(struct 人));
//分配空间
浮标->下一个 = 人;
人->上一个 = 浮标;
人->下一个 = NULL;
人->编号 = n;
浮标 = 人;
}
表头.下一个->上一个 = 浮标; //形成环形链表
浮标->下一个 = 表头.下一个;
浮标 = 浮标->下一个;
//定位到第一个数据实体。
int 点名;
while (退出) //退出一个
{
退出 = 退出 - 1;
点名 = m;
while (点名)
//点名m次
{
点名 = 点名 - 1;
浮标 = 浮标->下一个;
}
浮标->上一个->下一个 = 浮标->下一个;//将当前结构体从链表中剔除。
浮标->下一个->上一个 = 浮标->上一个;
释放 = 浮标;
浮标 = 浮标->下一个;
free(释放);
}
printf("上一个:%d,当前:%d,下一个:%d,编号:%d\n", 浮标->上一个, 浮标, 浮标->下一个, 浮标->编号);
//你要的数据在这里
free(浮标);
getchar();
}
收到的鲜花