约瑟夫问题C语言编程问题:约瑟夫问题求解

约瑟夫问题  时间:2021-07-16  阅读:()

约瑟夫问题链表方法

//原来的程序是用数组做的,这个题目用数组做其实比用链表要直观,简便 //给出一个链表的解法: #include <iostream> #include <malloc.h> struct man{ int num; //编号 bool out; //是否报过数 struct man *next; }; #define N 100 /*圈内人数*/ #define M 10 /*报数*/ using namespace std; void main(){ man *head,*p,*q; int i,j=0; head=(man*)malloc(sizeof(man)); p=head; head->num=1; for(i=2;i<=N;i++) /*编号*/{ q=(man*)malloc(sizeof(man)); q->num=i; p->next=q; p=q; } q->next=head; //采用的是循环链表 int count=N; while(count){ p->out=false; p=p->next; count--; } cout<<"The out sequence is:"<<endl; //打印出圈顺序 p=head; while(count<N){ while(j<M){ q=p; if(!(p->out)) j++; p=p->next; } q->out=true; cout<<q->num<<" "; count++; j=0; } cout<<endl; getchar(); }

C语言编程:约瑟夫问题

#include "stdio.h" main() { int i,k,quit_num,a[30],*p; p=a; for(i=0;i<30;i++) *(p+i)=i+1; printf("the position of feijiaotu are: "); quit_num=0; k=0; i=0; while(quit_num<15) {if(*(p+i)!=0)k++; if(k==9) {printf("%5d",*(p+i)); quit_num++; *(p+i)=0; k=0; } i++; if(i==30)i=0; } printf(" the position of jiaotu are: "); for(i=0;i<30;i++) if(*(p+i)!=0)printf("%5d",*(p+i)); }

求约瑟夫问题思路

m从k+1开始向后迭代 用数组a[2*k]存人,1为好人0为坏人,num存剩余人数,loc存当前位置 确定下一个人用a[(loc+m)%num](具体你再算算),若要杀的人是1则看num,num==k说明此m成功

约瑟夫问题!!

只实现出列顺序 #define JN 7 #define JM 20 void jossen() { int a[JN+1]; int i=0; int j=0; int k=0; //intpwd[JN+1]; for(i=0;i<=JN;i++) {a[i]=i; /*cout<<"input the password for man “<<i<<":"; cin>>&pwd[i]*/} for(i=JN;i>=1;i--) { k=JM%i; if(0==k) k=i; /*cout<<"NO "<<JN+1-i<<": looking for "<<k<<" in: "; for(j=0;j<=JN;j++) {cout<<"a["<<j<<"]="<<a[j]<<",";} cout<<endl;*/ for(j=1;j<=JN;j++) { if(k == a[j]) { cout<<j<<", "; a[j]=0; int l=1; for(int p=j+1;l<i;p++) { if(p != JN+1 && a[p%(JN+1)]) { a[p%(JN+1)]=l++; } //cout<<"a["<<p%(JN+1)<<"]="<<a[p%(JN+1)]<<","; } break; } } cout<<endl; } }

什么是约瑟夫问题

约瑟夫问题是个有名的问题:N个人围成一圈,从第一个开始报数,第M个将被杀掉,最后剩下一个,其余人都将被杀掉。

例如N=6,M=5,被杀掉的人的序号为5,4,6,2,3。

最后剩下1号。

假定在圈子里前K个为好人,后K个为坏人,你的任务是确定这样的最少M,使得所有的坏人在第一个好人之前被杀掉。

C语言编程问题:约瑟夫问题求解

用一个循环链表就可以完成了! #include struct node{ int data; struct node *next; }node,*list,*p,*r; void JOSEPHU(int n,int k,int m) { int i,j; list=NULL; for(i=1;i<=n;i++) { p=(struct node*)malloc(sizeof(node)); p->data=i; if(list==NULL) list=p; else r->next=p; r=p; } p->next=list; /*建立一个循环链表*/ p=list; for(i=1;i<=n+1;i++) { printf("%d ",p->data); p=p->next; } printf(" "); /*打印链表,并检查循环链表是不输入正确*/ p=list; i=1; while(p&&inext; ++i; } for(i=1;inext; } printf("The out=%d ",p->data); r->next=p->next; } } void main() { int x, y, z; printf("input the lenth n ");/*n,k,m分别代表总的人数,第一个报数的人,间隔的人数*/ scanf("%d",&x); printf("input the start k "); scanf("%d",&y); printf("input the m "); scanf("%d",&z); JOSEPHU(x,y,z); }

[6.18]IMIDC:香港/台湾服务器月付30美元起,日本/俄罗斯服务器月付49美元起

IMIDC发布了6.18大促销活动,针对香港、台湾、日本和莫斯科独立服务器提供特别优惠价格最低月付30美元起。IMIDC名为彩虹数据(Rainbow Cloud),是一家香港本土运营商,全线产品自营,自有IP网络资源等,提供的产品包括VPS主机、独立服务器、站群独立服务器等,数据中心区域包括香港、日本、台湾、美国和南非等地机房,CN2网络直连到中国大陆。香港服务器   $39/...

艾云年付125元圣何塞GTT,洛杉矶vps年付85元

艾云怎么样?艾云是一家去年年底成立的国人主机商家,商家主要销售基于KVM虚拟架构的VPS服务,机房目前有美国洛杉矶、圣何塞和英国伦敦,目前商家推出了一些年付特价套餐,性价比非常高,洛杉矶套餐低至85元每年,给500M带宽,可解奈飞,另外圣何塞也有特价机器;1核/1G/20G SSD/3T/2.5Gbps,有需要的朋友以入手。点击进入:艾云官方网站艾云vps促销套餐:KVM虚拟架构,自带20G的防御...

HaBangNet(6.95美元/月)美国vps 5TB流量/德国vps 香港双向CN2 GIA VPS

HaBangNet支持支付宝和微信支付,只是价格偏贵,之前国内用户并不多。这次HaBangNet推出三个特价套餐,其中美国机房和德国机房价格也还可以,但是香港机房虽然是双向CN2 GIA线路,但是还是贵的惊人,需要美国和德国机房的可以参考下。HaBangNet是一家成立于2014年的香港IDC商家,中文译名:哈邦网络公司,主营中国香港、新加坡、澳大利亚、荷兰、美国、德国机房的虚拟主机、vps、专用...

约瑟夫问题为你推荐
论坛源码求高手推荐一个好的论坛源码?要可以购买版权的那种,要便宜的知识库管理系统什么是知识管理查字网拐字换什么偏旁 成新字备忘录模式Java中常用的设计模式有哪些?请详细说明一下工厂模式。调度系统配送调度系统是干嘛的?是手机还是电脑的系统?rownumbersql server 2005中row_number怎么用vipjrvipjr跟哒哒英语比,两家公司的区别在哪里?各自的特点有哪些?民生电商陆金所、民生电商哪个更适合投资?色库photoshop7.0怎么改PANTONE色号memsql易语言的msql连接怎么不成功,错哪呢?
太原域名注册 免费com域名申请 免费动态域名 plesk 宕机监控 天猫双十一抢红包 免费mysql php空间推荐 泉州移动 厦门电信 双线asp空间 免费asp空间申请 稳定空间 域名和主机 带宽测试 小夜博客 七十九刀 石家庄服务器 空间排行榜 reboot 更多