这是我自己写的一段代码:
//功能:解决约瑟夫问题
#include<stdio.h>
#define N 9
#define K 2
#define M 3
//给数组赋值
void setDate(int a[],int n)
{ int i
for(i=0i<侍者如ni++)
a[i]=i+1
}
//删除被选中的孩子
void deleted(int a[],int m,int len)
{
int i=m
do
{
a[i]=a[i+1]
i++
}while(i<len)
}
//开始老启play
void play(int a[],int k,int m)
{
int len =N
int dm=k+m-2//第一个嫌数被剔除的孩子
while(len!=1)
{printf("第%d个孩子被剔除。\n",a[dm])
deleted(a,dm,len)//将被剔除的孩子从数组中删除
dm=dm+M-1//下一个被剔除的孩子
len--//数组的长度减1
if(dm>=len) dm=dm-len
}
printf("最后一个孩子是%d.",a[0])//最后一个孩子被放在a[0]中
}
main()
{
int a[N]
setDate(a,N)
play(a,K,M)
}
这个很难界定,看看下面资料吧 1.西元1801年法国人约瑟夫�6�4杰夸德(JosephJacquard)发明使用打孔卡片(Punched carboard card)控制的自动化织布机。对未来电脑的发展引进两个重要的观念:一、资讯可以在打孔卡片上编脊毁高码(Coded)二、资讯可以储存在卡片上,而且当这些卡片成串的组合在一起,就可以做为一连串的指令 - 实际上也就是程式。 2.西元1833年英国数学家剑桥大学的查理�6�4巴贝基(Charles Babbage)完成一部差分机(Difference engine),尔后并完成一部功能更强的机器,称为分析机(Analytical engine),这一部机器在观念上与现代电脑极为相似,对计算机余渗贡献良多,因尊称为「电脑之父」。至於分析机的有些构思是来自其密友兼同事 - 萝蕾斯伯爵夫人(Countess of Lovelace),即诗人拜仑(Byron)的女儿艾达�6�4奥古斯塔(Ada Augusta)的惊人见解。她被公认为"程式设计的鼻祖"(The first programmer),她所研究就是一种用来送入分析机,并能使这部机器执行工作的指令。 3. 西元1890年,美国政府授命赫勒里斯制造一部机器,来协助执行1890年美国人口普查工作。这部机器是以打孔片储存资料,而且是由电力带动的。由於这部机器的协助,人口普查的统计结果只花了三年的时间就完成了(如1880年度的人口普查资料花了七年的时间才统计完成,而且官员们还担心著是否会遗漏了其中某些的细节)。 这些发明只是用来辅助计算的工具樱尺,它们都没有记忆与储存资料的功能, 因此不能称为 『 电脑 』。 二.发展史:世界上第一部『 电脑 』是由 美国人毛琪雷与爱克特在 1946 年发明。随著电脑科技之进步,『 电脑 』已由庞然大物演变到现在的微型电脑,也就是我们所称的 个人电脑 ( Personal Computer ) 简称 PC。 三. 电脑的特性: 1.速度快 2.储存容量大 3.准确性高你这个问题其实是一个约瑟夫环的问题,我给你写了一个程序,其中每个人的密码是逐个给的,仅供参考,这应该是数据结构课程中有关循环队列的知识。程序代码如下:(运行环境:Microsoft Visual C++ 6.0)
#include<iostream.h>
#include<stdlib.h>
#include<string.h>
typedef struct Node{//结点的数据类型
int data
Node* next
}Node,*Lnode
void Del_Out(Lnode L,int m,int n) //约瑟夫环出环顺序函咐烂颤数
{
int iLnode p,q
for(p=L,i=1!(i==n)i++) p=p->next
for(i=1!(p==p->next)i++){ //约瑟夫环出环顺序循环
if(i%m==0){
q=p->next//报到M的人出圈
cout<<q->data<<'\t'
p->next=q->next
delete q
cout<<"请输入下一个报数起始人持有的密码m="
cin>历谈>m
if(m<1){
cout<<"m必须是大于0的正整数!"<<endl
m=1
}
i=0
}
else p=p->next //末报到M的不出圈
}
cout<<p->next->data<<'\n'delete p
}
char* InCheck(void)//输入值并验证函数
{
char* X=new char[50] //输入缓冲区
if(!X){ cout<<"申请动态内存失败!\n"exit(3)}
cin.getline(X,50)
for(int y=0y<(strlen(X))||strlen(X)==0y++) //非法输入数据重新输入的循环
if(X[y]>57||X[y]<48||strlen(X)==0)
{
cout<<"非法输入!请重新输入:"
cin.getline(X,50)
y=-1
continue
}
return X
}
void welcome()
{
cout<<"******************欢迎使用本程序******************\n\n"
cout<<"********本程序为实现约瑟夫环出环顺序的程序衡败********\n"
cout<<"**请根据提示分别输入约瑟夫环的报数值M和环总数值N**\n\n"
cout<<"**************************************************\n\n"
}
void main(void)
{
int m,n
Lnode L,S,R
L=NULL
welcome()
do{ cout<<"请输入M(报数值)的值:"m=atoi(InCheck())}while(m<=0)
do{ cout<<"请输入N(环总数值)的值:"n=atoi(InCheck())}while(n<=0)
for(int i=ni>0i--)//新建一条循环单链表
{
S=new NodeS->data=i
if(!L) R=L=S,L->next=NULL
else S->next=L,L=S
}
R->next=L
cout<<"\n该约瑟夫环出环顺序为:\n"
Del_Out(L,m,n)
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)