约瑟夫问题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); }

搬瓦工最新套餐KVM,CN2线路

搬瓦工在国内非常流行的主机商,以提供低价的vps著称.不过近几年价格逐渐攀升.不过稳定性和速度一向不错.依然深受国内vps爱好者喜爱.新上线的套餐经常卖到断货.支持支付宝,paypal很方便购买和使用.官网网站:https://www.bandwagonhost.com[不能直接访问,已墙]https://www.bwh88.net[有些地区不能直接访问]https://www.bwh81.net...

PhotonVPS:$4/月,KVM-2GB/30GB/2TB/洛杉矶&达拉斯&芝加哥等

很久没有分享PhotonVPS的消息,最近看到商家VPS主机套餐有一些更新所以分享下。这是一家成立于2008年的国外VPS服务商,Psychz机房旗下的站点,主要提供VPS和独立服务器等,数据中心包括美国洛杉矶、达拉斯、芝加哥、阿什本等。目前,商家针对Cloud VPS提供8折优惠码,优惠后最低2G内存套餐每月4美元起。下面列出几款主机配置信息。CPU:1core内存:2GB硬盘:30GB NVm...

NameCheap 2021年新年首次活动 域名 域名邮局 SSL证书等

NameCheap商家如今发布促销活动也是有不小套路的,比如会在提前一周+的时间告诉你他们未来的活,比如这次2021年的首次活动就有在一周之前看到,但是这不等到他们中午一点左右的时候才有正式开始,而且我确实是有需要注册域名,等着看看是否有真的折扣,但是实际上.COM域名力度也就一般需要51元左右,其他地方也就55元左右。当然,这次新年的首次活动不管如何肯定是比平时便宜一点点的。有新注册域名、企业域...

约瑟夫问题为你推荐
元数据管理数据治理包含哪些内容?数据治理有标准吗?微信收款语音播报怎么设置怎么修改微信收款提示音最开放的浏览器用的最多的三个浏览器是?qq注册账号用QQ注册有几种方法?bindserviceservice在手机程序中起什么作用deviceid如何查看自己安卓手机的Android Device ID拓扑关系什么是矢量数据、栅格数据、拓扑关系?inode智能客户端iNode 智能客户端windows7上网方法民生电商民生电商与传统的电商有什么区别?图片存储手机照片的保存方法?
花生壳域名 火山主机 ftp空间 cybermonday 阿云浏览器 sharktech 免费申请网页 linode日本 20g硬盘 哈喽图床 gg广告 美国十次啦服务器 新天域互联 cdn加速是什么 如何安装服务器系统 免费的域名 德隆中文网 广州虚拟主机 阿里云邮箱怎么注册 htaccess 更多