问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

C语言实验题——约瑟夫问题

发布网友 发布时间:2022-05-13 15:37

我来回答

2个回答

热心网友 时间:2023-10-14 17:36

这个是用循环链表作的,已经很简单了:)

#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;
}

热心网友 时间:2023-10-14 17:36

我们有这个实验耶!
老师的:#include<stdio.h>
#define M 10
#define N 3
void main(void)
{
int a[M], b[M]; /*数组a存放圈中人的编号,数组b存放出圈人的编号*/
int i, j, k;
for(i = 0; i < M; i++) /*对圈中人按顺序编号1—M*/
a[i] = i + 1;
for(i = M, j = 0; i > 1; i--){
/*i表示圈中人个数,初始为M个,剩1个人时结束循环;j表示当前报数人的位置*/
for(k = 1; k <= N; k++) /*1至N报数*/
if(++j > i - 1) j = 0;/*最后一个人报数后第一个人接着报,形成一个圈*/
b[M-i] = j? a[j-1] : a[j+1] ; /*将报数为N的人的编号存入数组b*/
if(j)
for(k = --j; k < i; k++) /*压缩数组a,使报数为N的人出圈*/
a[k] = a[k+1] ;
}
for(i = 0;i < M – 1; i++) /*按次序输出出圈人的编号*/
printf(“%6d”, b[i]);
printf(“%6d\n”, a[0]); /*输出圈中最后一个人的编号*/
}

我的:

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
struct number{
int num;
struct number *next;
};
struct number * create(int n); /*创建循环列表*/
int n,k,l;
struct number *head,*p1,*p2;
void main (void)
{

printf("number you want \n");
scanf("%d",&n);
printf("number to choose\n");
scanf("%d",&l);

k = 1;

p1 = create(n);

while (n != 0)
{

if(!(k % l))
{
printf("%d\n",p1->num);

p2->next = p1->next;
n--;
}
p2 = p1;
p1 = p1->next;
k++;
}

getch();
}

struct number *create(int n)
{
int i;
p1 = (struct number *)malloc(sizeof(struct number) );
head = p1;
for(i = 1; i < n; i++)
{
p1->num = i;
p2 = p1;
p1 = (struct number *)malloc(sizeof(struct number) );
p2->next = p1;
}
p1->num = n;
p1->next = head;

return head;
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
中导条约是什么意思 南京的事业单位待遇好吗 condition ...个登陆和注册信息的源代码,最简单的就可以,不需要数据库的那种... 个旧附近的vba编程培训机构哪家比较正规? 个旧附近的.Net培训班? 个旧附近的编程培训班? 个旧附近哪里有编程培训在哪里? 湖口哪里可以学电脑电脑技术哪里可以学习 个旧北大青鸟少儿编程培训学费多少? C语言考试题目 熟葡萄籽有抗氧化功效吗 我想送朋友生日蛋糕,但我们不在一个城市,怎么办? 苹果5se什么时候上市多少钱 iPhone5SE什么时候上市 苹果5SE最新消息 一个大二的数据结构C语言的实验题? C语言考试试题:定义一个100位学生的结构体数组,按成绩从高到低进行排序 5se上市时间?价格? HP硒鼓如何辨真假 苹果iPhone5Se什么时候上市 为什么中华烟的防伪标志,碰到热度他就会变成蓝色,不过一会又会变成乳白色?究竟是利用什么化学药水?这 苹果5SE什么时候出来啊 苹果5se上市时间? 请问激光防伪标签(变色)为什么会用来防伪?是很难仿造吗? 防伪标签的变色怎么做 三至六岁儿童发展指南(语言) 为什么我的依视路变色镜片一变色就出防伪标,会不会是假的 有SF60防伪标识的变色镜片 周口店北京人遗址博物馆怎么样 周口店北京人遗址的遗址价值 grape seed是什么意思 我在外地,有天津的朋友过生日,想给他订个蛋糕。有知道麻烦告诉我一声,多谢了哦! grapeseed是什么意思 未签劳动合同仲裁输了 葡萄籽的衍生产品 未签劳动合同仲裁输了可以申诉吗 未签劳动合同仲裁输了可以上诉吗 空调制冷液管凉是怎么回事 空调液管阀门是哪个啊 初学者学习吉他需要报班吗? 学吉他一定要报班吗 初学吉他有必要报吉他班吗 没签劳动合同仲裁能赢吗 格力中央空调的液管和气管分别是什么管子 空调分液管组件的液管为什么要套热缩管 真心想学吉他,报培训班吗 员工未签订劳动合同,劳动仲裁赢了,为什么公司还起诉,说我们无辜旷工,造成重大损失,安全隐患, 想学习吉他,需要报班和老师学吗? 我与某酒店没有签订劳动合同,我到劳动仲裁申请裁决,如果对方输了,他被仲裁罚款吗 不签劳动合同申请劳动仲裁胜算大吗