C语言实验题——约瑟夫问题
来源:百度知道 编辑:UC知道 时间:2024/06/18 14:46:22
--------------------------请用C语言编写-------------------------------------------------------------------------------------------------
题目描述
n个人想玩残酷的死亡游戏,游戏规则如下:
n个人进行编号,分别从1到n,排成一个圈,顺时针从1开始数到m,数到m的人被杀,剩下的人继续游戏,活到最后的一个人是胜利者。请输出最后一个人的编号。
输入
输入n和m值。1<n,m<150。
输出
输出胜利者的编号。
样例输入
5 3
样例输出
4
提示
第一轮:3被杀
第二轮:1被杀
第三轮:5被杀
第四轮:2被杀
能不能再简单点
题目描述
n个人想玩残酷的死亡游戏,游戏规则如下:
n个人进行编号,分别从1到n,排成一个圈,顺时针从1开始数到m,数到m的人被杀,剩下的人继续游戏,活到最后的一个人是胜利者。请输出最后一个人的编号。
输入
输入n和m值。1<n,m<150。
输出
输出胜利者的编号。
样例输入
5 3
样例输出
4
提示
第一轮:3被杀
第二轮:1被杀
第三轮:5被杀
第四轮:2被杀
能不能再简单点
这个是用循环链表作的,已经很简单了:)
#include <conio.h>
#include <stdio.h>
#include <malloc.h>
typedef struct num
{
int data;
struct num *next;
}node;
int main()
{
node *p1,*p2,*head;
int i,m,n,count=1;
scanf("%d %d",&n,&m);
head=p1=(node*)malloc(sizeof(node));
for(i=0;i<n;i++)
{
p2=(node*)malloc(sizeof(node));
p2->data=i+1;
p1->next=p2;
p1=p2;
}
p1->next=head->next;
free(head);
p1=p1->next;
while(p1!=p1->next)
if(count==m)
{
p2=p1->next;
p1->data=p2->data;
p1->next=p2->next;
free(p2);
count=1;
}
else
{
p1=p1->next;
count++;
}
printf("%d",p1->data);
getch();
return 0;
}
我们有这个实验耶!
老师的:#include<stdio.h&