当前位置:首页 » 课程大全 » 约瑟夫环课程设计

约瑟夫环课程设计

发布时间: 2021-02-09 10:47:43

㈠ 约瑟夫问题课程设计

核心代码如下:
Dim a() As Integer, b() As Integer, m As Integer, n As Integer, j As Integer, k As Integer, c As Integer, x As Integer
n = InputBox("请输入参加队列人数")
m = InputBox("请输入起始密码")
x = InputBox("密码的上限为:")
ReDim a(1 To n) As Integer, b(1 To n) As Integer
For i = 1 To n
a(i) = 1
b(i) = Int((x) * Rnd) + 1 '产生每内个人的随机密码
Next
While c < n
For j = 1 To n
k = k + a(j) '计数容
If k = m And a(j) <> 0 Then
k = 0 '下一个人从1开始报数
a(j) = 0 '出列
Print "出列人的编号为" & j; ",该人的密码为" & b(j)
m = b(j)
c = c + 1 '累计出列的人数
End If
Next
Wend
该代码已经经过调试,完全正确

㈡ 数据结构(C语言)约瑟夫环课程设计,主要要有代码的流程分析(流程图等等),还有算法描述。

#include<stdio.h>
#include<stdlib.h>
typedef struct Node
{
int password;
int num;
struct Node *next;
}Node,*Link;
void InitList(Link &L)
{
L=(Node *)malloc(sizeof(Node));
if(!L) exit(1);
L->password=0;
L->num=0;
L->next=L;
}
void Creater(int n,Link &L)
{
Link p,q;
q=L;
for(int i=1;i<=n;i++)
{
p=(Node *)malloc(sizeof(Node));
if(!p) exit(1);
printf("请输入第 %d 个人的密码 : ",i);
scanf("%d",&p->password);
p->num=i;
L->next=p;
L=p;
}
L->next=q->next;
free(q);
}
void main()
{
printf("*********************约瑟夫环********************* \n");
Link L,p,q;
int n,m;
int a=1;
int b=1;
while(b==1)
{
L=NULL;
InitList(L);
printf("请输入总人数 N: \n");
scanf("%d",&n);
while(n<=1)
{
printf("输入的总人数有误,请重新输入大于1的总人数:\n");
scanf("%d",&n);
}
printf("请输入初始的上限值 M (正整数):\n ");
scanf("%d",&m);
while(m<0)
{
printf("输入上限值有误,请重新输入:\n");
scanf("%d",&m);
}
Creater(n,L);
printf("最终出列的顺序为 : \n");
p=L;
for(int i=1;i<=n;i++)
{
for(int j=1;j<m;j++)
{
p=p->next;
}
q=p->next;
m=q->password;
printf("%d ",q->num);
p->next=q->next;
free(q);
}
printf("\n");
printf("是否继续重新输入运算 (1.继续 0.退出):\n ");
scanf("%d",&b);
printf("\n\n\n");
}
}

㈢ 《数据结构》课程设计,包括约瑟夫环问题求解和八皇后问题求解两题。明天下午之前给我答案。。我给100分

约瑟夫环的答案是:
typedef struct node
{int num;
struct node *next;
} linklist;

linklist *creat(int n)
{linklist *s,*p,*head;
int i;
s=(linklist*)malloc(sizeof(linklist));
head=s;
s->num=1;
p=s;
for(i=2;i<=n;i++)
{s=(linklist*)malloc(sizeof(linklist));
s->num=i;
p->next=s;
p=s;
}
p->next=head;
return (head);
}
void slect(linklist *head,int m,int n)
{linklist *p,*q;
int i,t,k=1;
p=head;
t=1;
q=p;
do
{p=q->next;
t=t+1;
if(t%m==0)
{printf("%4d",p->num);
q->next=p->next;
k++;
free(p);
}
else q=p;
}while(k
}

void main()
{int n,m;
linklist *a,*head;
printf("Input the total number\n");
scanf("%d",&n);
printf("Input the number to call:\n");
scanf("%d",&m);
head=creat(n);
slect(head,m)
;
}
至于,八皇后的问题.不太清楚!

㈣ joseph环的C语言程序设计

给,已经编译运行通过:
#include<stdio.h>
#include<stdlib.h>
typedef struct Node
{
int key;//每个人持有的密码
int num;//这个人的编号
struct Node *next;//指向下一个节点
}Node,*Link;
//=================================
void InitList(Link &L) //创建一个空的链表
{
L=(Node *)malloc(sizeof(Node));
if(!L) exit(1);
L->key=0;
L->num=0;
L->next=L;
}
void Creater(int n,Link &L) //初始化链表
{
Link p,q;
q=L;
for(int i=1;i<=n;i++)
{
p=(Node *)malloc(sizeof(Node));
if(!p) exit(1);
printf("the key_%d is:",i);
scanf("%d",&p->key);
p->num=i;
L->next=p;
L=p;
}
L->next=q->next;
free(q);
}
void main()
{
Link L,p,q;
int n,x;
L=NULL;
InitList(L);//构造出一个只有头结点的空链表
printf("please input the totle number of people:");
scanf("%d",&n);//总共的人数n
printf("the start key is:");
scanf("%d",&x);//初始密码为x
Creater(n,L);//建立好一个约瑟夫环
p=L;
for(int i=1;i<=n;i++)
{
for(int j=1;j<x;j++)
p=p->next;
q=p->next;
x=q->key;
printf("%d ",q->num);
p->next=q->next;
free(q);
}
}

㈤ 求助高手 数据结构课程设计约瑟夫环问题

#include <stdio.h>
#include <malloc.h>
#define NULL 0

typedef struct Node
{
int m;//密码
int n;//序号
struct Node *next;
}Node,*Linklist;

Linklist create(int z) //生成循环单链表并返回,z为总人数
{
int i,m;
Linklist H,r,s;
H=NULL;
printf("Output the code:");
for(i=1;i<=z;i++)
{
("\nInput m=");
scanf("%d",&m);
s=(Linklist)malloc(sizeof(Node));
s->n=i;
s->m=0;
printf("%d",s->m);
if(H==NULL)//从链表的第一个节点插入
{
H=s;
r=H;
}
else//链表的其余节点插入
{
r->next=s;
r=s;//r后移
}
}//for结束
r->next=H;/*生成循环单链表*/
return H;
}

void search(Linklist H,int m0,int z)//用循环链表实现报数问题
{ int count=1;//count为累计报数人数计数器
int num=0;//num为标记出列人数计数器
Linklist pre,p;
p=H;
printf("Output the order:");
while(num<z)
{
do{
count++;
pre=p;
p=p->next;
}while(count<m0);
pre->next=p->next;
printf("%d ",p->n);
m0=p->m;
free(p);
p=pre->next;

num++;
}//while结束
}

void main()
{
int m0,z;
Linklist H;
printf("Input z:");//z为总人数
scanf("%d",&z);
H=create(z);//函数调用
printf("\nInput the start code m0=");
scanf("%d",&m0);
search(H,m0,z);
}

㈥ 数据结构 C语言版 课程设计 题目:约瑟夫环

O.O!啥叫课程设计格式~~~这个学期我倒是自己写过一个约瑟夫环的算法
#include<iostream.h>
typedef struct Node
{
int data;
struct Node *next;
}*Pointer;
Pointer p,q,s;

Pointer Initlink(Pointer &head)
{
head=new Node;
head->next=head;
return(head);
}

void Creatlink(Pointer &head,int n)
{
p=head;
if(n>=2)
{

for(int i=1;i<=n-1;i++)
{
p->data=i;
s=new Node;
p->next=s;
p=s;

}
p->data=n;
p->next=head;
}
else {
p->data=1;
p->next=head;
}

}

int Length(Pointer &head)
{
int j=1;
p=head;
while(p->next!=head)
{
p=p->next;
j++;

}
return(j);

}

Pointer Find(Pointer &head,int i)
{
p=head;
if(i>1)
{
for(int t=1;t<=i-1;t++)
{
p=p->next;
}
}
else
{
p=head;
}
return p;

}

void Delete(Pointer &head,int m)
{

if(m>1)
{
p=Find(head,m-1);
q=p->next;
p->next=p->next->next;
delete(q);
}
else
{
p=Find(head,Length(head));
p->next=p->next->next;
}
}

void main()
{
int n,m;
Pointer head,s;
Initlink(head);
s=head;
cout<<"请输入数据总量:"<<endl;
cin>>n;
Creatlink(head,n);
cout<<"请输入循环次数m:"<<endl;
cin>>m;
cout<<"输出为:";
for(int temp=0;temp<n;temp++)
{
cout<<Find(head,m)->data<<" ";
s=head;
head=Find(head,m+1);
Delete(s,m);
}

}
这个程序的思想很简单大体内容分两块:1.建立一个长度为n的循环链表设。n=8,并将链表的数据域分别设置为1,2,3,4,5,6,7,8。这就是约瑟夫环的大体框架。2.从1开始每经过m个数据便删除该数据并将其输出。设m=4,则第一个输出的数字是4,第二个数字是8,第三个数字是5(由于链表是循环的),然后依次输出下去直到全部输出为止。这就是对链表所需要进行的操作。也就最终完成了约瑟夫环~

因此为了达到以上目的,你需要一个建立链表的函数及源代码中的 Creatlink(Pointer &head,int n),还需要一个循环删除的函数及void Delete(Pointer &head,int m),而完成了这样的操作还是不行,因为有一些细节还需要处理,因为这个删除操作是循环进行的,所以你需要在删除一个数据以后从下一个数据从新开始经过m再删除,而不是重新从头结点开始删除,所以你需要一个查找函数Find(Pointer &head,int i),这个函数的作用是查找链表中的第i个节点。这样我们的函数就最终完成了~~~~

以上只不过是我的一点心得,当然算不上什么课程设计格式,只是希望可以让楼主学到些东西而已~

㈦ 数据结构JAVA 约瑟夫环问题 课程设计

public class YSF {

/**
* 约瑟夫环
* @param m 数到m退出
* @param n 共有n个人专
* @param k 从第属k个开始数
* @return
*/
private static int ysf(int m, int n, int k) {
int result = 0;
for (int i = 2; i <= n; i++) {
result = (result + m) % i;
}
return result + k % n;
}

public static void main(String[] args) {
System.out.println(ysf(3, 500, 1));
}
}

㈧ 数据结构课设(joseph环)用C语言求解

1.用循环.
# include "stdio.h"
# define SIZE 100
main()
{
int m,n,i;
int array[SIZE];
printf("约瑟夫环求解,当前设置最大人数为%d.\n",SIZE);
printf("报数上限:\n");
scanf("%d",&m);
printf("总人数为:\n");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("第%d人的密码为:",i+1);
scanf("%d",&array[i]);
}
joseph(array,m,n);
}
int joseph(a,m,n)
int a[],m,n;
{
int b[SIZE]; /*计录编号数组.*/
int i; /*计数器.*/
int flag=0;
int code; /*删取人的号码.*/
int sum=n; /*现存人数.*/
int point=0; /*当前报数人的位置.*/
int num=m;
for(i=0;i<n;i++) /*计录数组.*/
{
b[i]=i+1;
}
while(sum!=0) /*当人数不为零时继续循环.*/
{
for(i=1;i<=num;i++) /*进行报数.*/
{

if(point>=sum) /*当前报数位置超过最后一人时从第一人报起.*/
{point=1;}
else point++;

}
num=a[point-1]; /*取密码.*/
code=b[point-1]; /*取号码.*/
for(i=point;i<=sum;i++) /*删去退出的人.*/
{
a[i-1]=a[i];
b[i-1]=b[i];

}
sum--; /*现存总人数.*/
flag++; /*退出的人数.*/
point--;
printf("已退出%d人,退出的人的编号为%d.\n",flag,code);
}

}

2.用链表.

# include "stdio.h"
# include "alloc.h"
# define LEN sizeof(struct player)
struct player
{
int num; /*编号*/
int secret; /*密码*/
struct player *next;
};
int n; /*总人数*/
main()
{
int m;
void create();
void delete();
struct player *head;
head=(struct player *)malloc(LEN);
printf("请输入第一次的密码:\n");
scanf("%d",&m);
create(head);
delete(head,m);

}
void create(struct player *head)
{
struct player *p1,*p2,*p;
p1=p2=head;
printf("请输入编号,密码,当编号为零时输入结束.\n");
printf("总人数为:\n");
scanf("%d",&n);
do
{
p=p2;
p2=p1;
printf("编号:");
scanf("%d",&p2->num);
printf("密码:");
scanf("%d",&p2->secret);
p1=(struct player *)malloc(LEN);
p2->next=p1;
}while(p2->num!=0);
p->next=head;
free(p1);
}
void delete(struct player *head,int m)
{
int i;
struct player *p,*q;
int sum;
p=head;
sum=m;
while(n!=0)
{
for(i=1;i<sum;i++)
{ q=p;
p=p->next;
}
printf("%d,",p->num);
sum=p->secret;
q->next=p->next;
p=p->next;
n=n-1;
}
}



㈨ 约瑟夫环问题vc++6.0

没懂个人密码是什么- -。我做的这个是输入m和n的。用的链表。

#include<iostream>

using std::cout;
using std::cin;

struct node
{
int num;
node *next;
};

struct linklist
{
node *rear;
int n;
};

void add(linklist &L,int i)
{
node *p,*q;
q=new node;
q->num=i;
if (i==1)
{
L.rear=q;
q->next=q;
}
else
{
p=L.rear->next;
L.rear->next=q;
L.rear=q;
q->next=p;
}
}

void create(linklist &L,int &n)
{
for (int i=1;i<=n;i++)
add(L,i);
}

void remove(linklist &L,int &n,int t)
{
node *p;
p=L.rear->next;
int times=1;
while (n!=0)
{
if (times+1==t)
{
times=0;
cout<<p->next->num<<" ";
n--;
p->next=p->next->next;

}
p=p->next;
times++;
}

}

int main(){
linklist L;
int t;
cin>>t>>L.n;
create(L,L.n);
remove(L,L.n,t);
return 0;
}

热点内容
武汉大学学生会辅导员寄语 发布:2021-03-16 21:44:16 浏览:612
七年级学生作文辅导学案 发布:2021-03-16 21:42:09 浏览:1
不屑弟高考成绩 发布:2021-03-16 21:40:59 浏览:754
大学毕业证会有成绩单 发布:2021-03-16 21:40:07 浏览:756
2017信阳学院辅导员招聘名单 发布:2021-03-16 21:40:02 浏览:800
查询重庆2018中考成绩查询 发布:2021-03-16 21:39:58 浏览:21
结业考试成绩怎么查询 发布:2021-03-16 21:28:40 浏览:679
14中医医师资格笔试考试成绩查分 发布:2021-03-16 21:28:39 浏览:655
名著赏析课程标准 发布:2021-03-16 21:27:57 浏览:881
北京大学商业领袖高端培训课程 发布:2021-03-16 21:27:41 浏览:919