约瑟夫问题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);
}
外贸主机哪家好?抗投诉VPS哪家好?无视DMCA。ParkinHost今年还没有搞过促销,这次parkinhost俄罗斯机房上新服务器,母机采用2个E5-2680v3处理器、128G内存、RAID10硬盘、2Gbps上行线路。具体到VPS全部200Mbps带宽,除了最便宜的套餐限制流量之外,其他的全部是无限流量VPS。ParkinHost,成立于 2013 年,印度主机商,隶属于 DiggDigi...
速云怎么样?速云是一家国人商家。速云商家主要提供广州移动、深圳移动、广州茂名联通、香港HKT等VDS和独立服务器。目前,速云推出深圳独服优惠活动,机房为深圳移动机房,购买深圳服务器可享受5折优惠,目前独立服务器还支持申请免费试用,需要提交工单开通免费体验试用,次月可享受永久8折优惠,也是需工单申请哦!点击进入:速云官方网站地址活动期限至 2021年7月22日速云云服务器优惠活动:活动1:新购首月可...
俄罗斯vps速度怎么样?俄罗斯vps云主机节点是欧洲十大节点之一,地处俄罗斯首都莫斯科,网络带宽辐射周边欧洲大陆,10G专线连通德国法兰克福、法国巴黎、意大利米兰等,向外连接全球。俄罗斯vps云主机速度快吗、延迟多少?由于俄罗斯数据中心出口带宽充足,俄罗斯vps云主机到全球各地的延迟、速度相对来说都不错。今天,云服务器网(yuntue.com)小编介绍一下俄罗斯vps速度及俄罗斯vps主机推荐!俄...
约瑟夫问题为你推荐
flash控件一台电脑要装哪几个flash插件食品商务网食品方面的网站那个最好!wmiprvse为什么会有wmiprvse.exe和wmiprvse 这两个 算不算病毒?showwindowvfp中菜单生成不能运行,提示说要把showwindow属性设为2,不懂求解云图片简单易学画的云彩图片rdlDVD±RW/±RDL/RAM 具体什么意思拓扑关系简述空间数据的拓扑关系及其对GIS数据处理和空间分析有何重要意义?备忘录模式手机如何设置备忘录提醒数据分析报告范文如何做一个好的数据分析报告优众网瑞达恒慧讯网是做什么的?
fc2最新域名 郑州服务器租用 美国linux主机 中国域名网 免费顶级域名 edgecast cve-2014-6271 密码泄露 华为云主机 免费网络电视 免费smtp服务器 150邮箱 什么是刀片服务器 metalink 789电视剧 吉林铁通 最漂亮的qq空间 空间租赁 阿里云免费邮箱 net空间 更多