约瑟夫玩家听力
约瑟夫的简介1个回答2024-02-09 12:35
公元37生于耶路撒冷,公元100年卒于罗马。约瑟夫是罗马帝国时期以为僧侣出身的犹太历史学家,也是一位犹太法利赛教徒(Pharisee)。
约公元64年游历罗马,在公元66年犹太起义前夕返回耶路撒冷。被俘后,他预言韦帕芗将取得帝位,随即得到赦免。
公元70年耶路撒冷陷落后,他在罗马定居并获得罗马公民权、一座房舍和养老金。
约瑟夫著有七卷本的《犹太战争》(Bellum Iudaicum),最初以阿剌美语(Aramaic)写成,其他作品均以希腊语写成,其中包括《犹太古史》(Antiquitates Iudaicae)——从创世到公元66年的犹太历史,约公元94年以20卷本刊布。他的《自传》(Vita)是对犹太起义由他发起和组织的说法的回复。
约瑟夫问题:1个回答2024-03-18 17:56
约瑟夫环:
约瑟夫环问题的一种描述是:编号为1.2.3…….n的n个人按顺时针方向围坐一圈
,每人手持一个密码(正整数),开始任意选一个整数作为报数上限值,从第一
个人开始顺时针自1开始顺序报数,报到m时停止报数。报m的人出列,将他的密
码作为新的m值,从他顺时针下一个人开始重新从1开始报数,如此下去直到所有
的人全部都出列为止。试设计程序实现。
要求:利用循环链表存储结构模拟此过程,按照出列的顺序打印各人的编号。
测试数据:m的值初始为20:密码3 ,1,7,2,4,8,4。
正确的结果:6,1,4,7,2,3,5。
提示:程序运行后首先要求用户指定初始报数上限。然后读取各人的密码。设
n<30。
typedef struct node
{
int num,code;
struct node *next;
}lnode;
void main()
{
int i,j,key,n; /*i,j为记数器,key为输入的密码,n为人的总个数*/
lnode *p,*s,*head;
head=(lnode *)malloc(sizeof(lnode)); /*为头结点分配空间*/
p=head;
printf("Please enter the num of the person:"); /*输入人的总个数*/
scanf("%d",&n);
for(i=1;i<=n;i++)
{
printf("Person %d",i);
printf(" code: ");
scanf("%d",&key); /*输入各个人的密码*/
s=p;
p=(lnode *)malloc(sizeof(lnode)); /*创建新的结点*/
s->next=p;
p->num=i;
p->code=key;
}
p->next=head->next;
p=head;
head=head->next;
free(p);
p=head;
do
{
printf("\nPerson%d Code:%d",p->num,p->code); /*输出链表*/
p=p->next;
}while(p!=head);
printf("\nPlease enter your first key:"); /*输入第一个数*/
scanf("%d",&key);
do
{
j=1; /*j为记数数*/
p=head;
while(j{
s=p;
p=p->next;
j++;
}
i=p->num;
key=p->code;
printf("\nThe out of the num:");
printf("Person%d",i);
s->next=p->next;
head=p->next; /*重新定义head,下次循环的开始结点*/
free(p);
n--; /*每循环一次人是减1*/
}while(n>0);
getch();
}
约瑟夫问题1个回答2024-06-11 09:12
你的问题是什么?若是编写程序要说明你要用的语言,以下是C的参考:
#include
#define N 30
int yuesefu1(int data[],int sum,int k)
{
int i=0,j=0,count=0;
while(count {
if(data[i]!=0)/*当前人在圈子里*/
j++;
if(j==k)/*若该人应该退出圈子*/
{
data[i]=0;/*0表示不在圈子里*/
count++;/*退出的人数加1*/
j=0;/*重新数数*/
}
i++;/*判断下一个人*/
if(i==sum)/*围成一圈*/
i=0;
}
for(i=0;i if(data[i]!=0)
return data[i];/*返回最后一个人的编号*/
}
int main()
{
int data[N];
int i,n,m;
printf("请输入总数:\n");
scanf("%d",&n);
for(i=0;i data[i]=i+1;
printf("请输入报数:\n");
scanf("%d",&m);
printf("最后的人为: %d\n",yuesefu1(data,n,m));
return 0;
}
约瑟夫问题1个回答2024-07-01 22:43
#include
#include
struct node{
int data;
struct node *next;
};
int main(){
int i,j,k,m,n;
struct node *head,*p,*q;
scanf("%d%d",&n,&m);
p=(struct node*)malloc(sizeof(struct node));
p->data=1;p->next=p;
head=p;
for(i=2;i<=n;i++)
{
q=(struct node*)malloc(sizeof(struct node));
q->data=i;q->next=head;
p->next=q;
p=q;
}
k=1;p=head;
while(p->next!=p){
if(k+1==m){
p->next=p->next->next;
k=1;
p=p->next;
}else{
k++;
p=p->next;
}
}
printf("%d\n",p->data);
system("pause");
return 0;
}
约瑟夫问题1个回答2024-08-07 02:47
//约瑟夫环:
//这并告个程序有点小问题,你自己看看吧,现在没时间改了,起始位置有点问题
#include
#include
int flag;
typedef struct node
{int data;
struct node *next;
}LNode,* Linklist;
Linklist CreatFromHead() //链表的初始化
{ Linklist L=NULL,s;
LNode *r=NULL;
int x=1;
s=(Linklist)malloc(sizeof(LNode));
L = s;
r= L;
printf("请输入请厅丛输入报数的人数");
scanf_s("%d",&flag);
while(x!=flag+1)
{s=(Linklist)malloc(sizeof(LNode));
s->data=x;
r->next=s;
r=s;
x++;
}
s->next=L;
if(r!=NULL) r->next=NULL;
return L;
}
Linklist Getlist(Linklist L,int i) //链表的查找函数
{Linklist p;
int j;
p=L;j=0;
while(p->next!=NULL&&j { p=p->next;
j++;
}
if(i==j)return p;
else return NULL;
}
Linklist treat(Linklist L,Linklist s,int k,int i) //约瑟夫环算法
{
int j=0;
if(s==NULL)
{
s=L->扮蔽樱next;
}
while(j {
s=s->next;
j++;
if(s==NULL)
{
s=L->next;
}
}
return s;
}
int Del_Linklist(Linklist L,Linklist p) //链表结点删除函数
{Linklist s;
s=L;
while((s->next->data != p->data))
{
s=s->next;
}
s->next=s->next->next;
free(p);
return 1;
}
void main() //主函数
{Linklist L;
Linklist p,s;
int i,k,m,n;
L=CreatFromHead();
printf("请输入查找的元素位置");
scanf_s("%d",&i);
printf("请输入相隔的位置:");
scanf_s("%d",&k);
m=0;
s=Getlist(L,i);
printf(".");
while(m{
p=treat(L,s,k,i);
printf("%d\t",p->data);
s=p->next;
n=Del_Linklist(L,p);
m++;
}
}
约瑟夫问题1个回答2024-07-02 17:23
约瑟夫环:
约瑟夫环问题的一种描述是:编号为1.2.3…….n的n个人按顺时针方向围坐一圈
,每人手持一个密码(正整数),开始任意选一个整数作为报数上限值,从第一
个人开始顺时针自1开始顺序报数,报到m时停止报数。报m的人出列,将他的密
码作为新的m值,从他顺时针下一个人开始重新从1开始报数,如此下去直到所有
的人全部都出列为止。试设计程序实现。
要求:利用循环链表存储结构模拟此过程,按照出列的顺序打印各人的编号。
测试数据:m的值初始为20:密码3,1,7,2,4,8,4。
正确的结果:6,1,4,7,2,3,5。
提示:程序运行后首先要求用户指定初始报数上限。然后读取各人的密码。设
n<30。
typedefstructnode
{
intnum,code;
structnode*next;
}lnode;
voidmain()
{
inti,j,key,n;/*i,j为记数器,key为输入的密码,n为人的总个数*/
lnode*p,*s,*head;
head=(lnode*)malloc(sizeof(lnode));/*为头结点分配空间*/
p=head;
printf("Pleaseenterthenumoftheperson:");/*输入人的总个数*/
scanf("%d",&n);
for(i=1;i<=n;i++)
{
printf("Person%d",i);
printf("code:");
scanf("%d",&key);/*输入各个人的密码*/
s=p;
p=(lnode*)malloc(sizeof(lnode));/*创建新的结点*/
s->next=p;
p->num=i;
p->code=key;
}
p->next=head->next;
p=head;
head=head->next;
free(p);
p=head;
do
{
printf("
Person%dCode:%d",p->num,p->code);/*输出链表*/
p=p->next;
}while(p!=head);
printf("
Pleaseenteryourfirstkey:");/*输入第一个数*/
scanf("%d",&key);
do
{
j=1;/*j为记数数*/
p=head;
while(j
{
s=p;
p=p->next;
j++;
}
i=p->num;
key=p->code;
printf("
Theoutofthenum:");
printf("Person%d",i);
s->next=p->next;
head=p->next;/*重新定义head,下次循环的开始结点*/
free(p);
n--;/*每循环一次人是减1*/
}while(n>0);
getch();
}
约瑟夫斯的著名的约瑟夫斯问题1个回答2024-04-21 12:09
据说著名犹太历史学家 Josephus有过以下的故事:在罗马人占领乔塔帕特後,39 个犹太人与Josephus及他的朋友躲到一个洞中罩棚,39个犹太人决定宁愿死也不要被人抓到,于是决定了一个自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止。
然而Josephus 和他的朋友并不想遵从,Josephus要他的朋友先假装遵从,他将朋友与自局闷册己安排在第16个与第31个位置,于是逃过了这场死亡游戏。
解法
约瑟夫问题可用代数分析来求解,将这个问题扩大好了,假设现在您与m个朋友不幸参与了这个游戏,您要如何保护您的朋友?只要画两个圆圈就可以让自己与朋友免于死亡游戏,这两个圆内圈是排列顺序桐宏,而外圈是自杀顺序,如下图所示:
约瑟夫环1个回答2022-10-26 22:26
约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。
链表方法:这个就是约瑟夫环问题的实际场景,有一种是要通过输入n,m,k三个正整数,来求出列的序列。这个问题采用的是典型的循环链表的数据结构,就是将一个链表的尾元素指针指向队首元素。 p->link=head 解决问题的核心步骤:(程序的基本算法) 1.建立一个具有n个链结点,无头结点的循环链表; 2.确定第1个报数人的位置; 3.不断地从链表中删除链结点,直到链表为空。 void JOSEPHUS(int n,int k,int m) //n为总人数,k为第一个开始报数的人,m为出列者喊到的数 { /* p为当前结点 r为辅助结点,指向p的前驱结点 list为头节点*/ LinkList p,r,list; /*建立循环链表*/ for(int i=0;idata=i; if(list==NULL) list=p; else r->link=p; r=p; } p->link=list; /*使链表循环起来*/ p=list; /*使p指向头节点*/ /*把当前指针移动到第一个报数的人*/ for(i=0;ilink; } /*循环地删除队列结点*/ while(p->link!=p) { for(i=0;ilink; } r->link=p->link; printf("被删除的元素:%4d ",p->data); free(p); p=r->link; } printf("\n最后被删除的元素是:%4d",P->data); }
什么是约瑟夫环?1个回答2022-10-17 18:28
约瑟夫问题的一种描述是:编号为1,2,……,n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数)。一开始任选一个正整数作为报数上限值m,从第一个人开始按顺时针方向自1开始顺序报数,报到m时停止报数。报m的人出列,将他的密码作为新的m值,从他在顺时针方向上的下一个人开始重新从1报数,如此下去,直至所有人全部出列为止。试设计一个程序求出出列顺序。基本要求 利用单向循环链表存储结构模拟此过程,按照出列的顺序印出各人的编号。实现提示 程序运行后,首先要求用户指定初始报数上限值,然后读取各人的密码。可设n≤30。此题所用的循环链表中不需要“头结点”,请注意空表和非空表的界限。
约瑟夫·熊彼特的主要作品1个回答2024-02-25 13:34
《经济发展理论》1911年发表德文版,1912年英文版问世;这本书是他的成名作 。
《经济发展理论》第二版,1926年。有做大幅修改,加上副标“企业者的利润、资本、信贷、利息及景气循环”;
《景气循环论》1939年出版;
《资本主义、社会主义与民主》1942年出版;
《经济分析史》1954年纽约出版。熊彼特去世后由遗孀整理发表。