题目
到第m的人又出列……如此反复,直到所有的人全部出列为止。对于任意给定的n,s和m,求出按出列次序得到的n个人员的序列。试将Josephus问题的求解过程在计算机中用顺序表结构加以实现。
第1题
第2题
阅读以下函数说明和C语言函数,将应填入(n)处的字句写在对应栏内。
[说明]
这是一个求解Josephus问题的函数。用整数序列1,2,3…,n表示顺序围坐在圆桌周围的人,并采用数组表示作为求解过程中使用的数据结构。Josephus问题描述,设n个人围坐在一个圆桌周围,现在从第s个人开始报数,数到第m个人,让他出局;然后从出局的下一个人重新开始报数,数到第m个人,再让他出局,…如此反复直到所有的人全部出局为止。
[C函数]
void Josephus(int A[],int n,s,m)
(int i,j,k,temp;
if(m==O){
printf("m=0是无效的参数!\n");
return;
}
for(i=0;i<n;i++) A[i]=i+1; /*初始化,执行n次*/
i= (1) /*报名起始位置*/
for(k=n;k>1;k-){
if((2)) i=0;
i=(3) /*寻找出局位置*/
if(i!=k-1){
tmp=A[i];
for(j=i;J<k-1;j++) (4);
(5);
}
}
for(k=0;k<n/2;k++){
tmp=A[k];A[k]=A[n-k+1];A[n-k+1]=tmp;
}
}
第3题
第6题
第7题
阅读以下函数说明和C语言函数,将应填入(n)处的字句写在对应栏内。
【说明】
设有n个人围坐一圈并按顺时针方向从1到n编号,从第s个人开始进行1到m的报数,报数到第m个人,则此人出圈,再从他的下一个人重新开始1到m的报数,如此进行下去,直到所有的人都出圈为止。
现要求按出圈次序,每10人一组,给出这n个人的顺序表。
设n=100,s=1,m=10。
(1)将1到n个人的序号存入一维数组p中;
(2)若第i个人报数后出圈,则将p置于数组的倒数第i个位置上,而原来第i+1个至倒数第i个元素依次向前移动一个位置:
(3)重复第(2)步,直至圈中只剩下p[1]为止。
include<stdio.h>
define N 100
define S 1
define M 10
void main()
{
int p[100],n,s,m;
m=M;
n=N;
s=S;
int i,j,s1,w;
s1=s;
for(i=1;(1);i++)
(2)=i;
for(i=n;i>=2;i--)
{
s1=(3);
if(s1==0)s1=i;
w=(4);
for(j=s1;j<i;j++)
p[j-1]=p[j];
p[i-1]=(5);
printf("%4d",p[i])}
}
第8题
第9题
第10题
设有n个参与人的集合I={1,2……,n},对任一子集S⊆I,定义一个实函数V(S)满足:当S1∩S2=φ,S1⊂I。S2⊂I时,V(S1∪S2)≤V(S1)+V(S2)。这点称为超可加性,在经济学上称之为协同效应。()
为了保护您的账号安全,请在“赏学吧”公众号进行验证,点击“官网服务”-“账号验证”后输入验证码“”完成验证,验证成功后方可继续查看答案!