约瑟夫问题c语言解决约瑟夫问题

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

约瑟夫问题。一个递推公式求解释我没整出来。不过应该不难。

#include<stdio.h> #include<string.h> int last(int num, t) { char m, n, dat[100], p= 0, len= num; for(m= 0; m < num; m++) dat[m]= m; dat[m]= 0; for(m= 0; m < num-1; m++) { for(n= 0; n<t; n++) { p++; if(p > len) p= 1; } printf("p=%d", p); strcpy(&dat[p-1], &dat[p]); p-= 1; len--; for(int i= 0; i< len ; i++) printf("%3d", dat[i]); printf(" "); } return dat[0]; } int main() { last(10, 3); return 0; }

约瑟夫问题c语言

#include #define size 100 /* 输入人数的上限 */ void main() { int person[size]; int i, j; /* 循环修正变量 */ int arrayLen; /* 数组长度 */ int start, overNum; /* 开始位置各跨过位置 */ int deleNum; /* 出列人所在数组中的下标 */ int name, total; /* 输入时,人的信息以及人的总数 */ printf( "请输入圆桌上人的总数: " ); scanf( "%d", &arrayLen ); printf( " " ); if( ( arrayLen > size ) || ( arrayLen < 0 ) ) { printf( "超出范围,请重新输入: " ); scanf( "%d", &arrayLen ); printf( " " ); }; printf( "请输入各个人的信息(整数): " ); for( i = 0; i < arrayLen; i++ ) { scanf( "%d", &name ); person[i] = name; } printf( "你输入的数据的顺序为: " ); for( i = 0; i < arrayLen - 1; i++ ) printf( " %d ==>", person[i] ); printf( "%d ", person[arrayLen - 1] ); printf( "你打算从第几个人开始? 请输入开始号: " ); scanf( "%d", &start ); printf( " " ); start = start - 1; printf( "请输入相邻两出列人之间的间隔: " ); scanf( "%d", &overNum ); printf( " " ); total = arrayLen; printf( "程序运行后,出列人的顺序为: " ); for( i = 0; i < total; i++ ) /* 要打印total个人的情况,故做total次 */ { if ( arrayLen == 1 ) printf( "%d", person[0] ); /* 如果是数组只剩一个元素,直接出列 */ else { deleNum = ( start + overNum - 1 ) % arrayLen; /* 此取模保证循环 */ printf( "%d ==> ", person[deleNum] ); for ( j = deleNum; j < arrayLen; j++ ) /* 将出列元素后面的各元素前移 */ person[j] = person[j+1]; start = deleNum; arrayLen = arrayLen - 1; /* 移动完毕后,数组长度减1 */ } } printf( " " ); } 从一本数据结构书上看到的用向量实现此问题: void Josephus (Vector &P, int n, int s, int m) { //将人员编号存入向量P; int k = 1; for(int i = 0; i=1; j--) { s1=(s1+m-1)%j; if(s1== 0) s1 = j; int w = P.Getnode(s1 - 1); P.Remvoe(s1 - 1); P.Insert(w,n-1); } } 以前学C语言的时侯写的,希望对你有用。

c语言解决约瑟夫问题

我自己写的直接用一维数组解决 #include<stdio.h> #define N 9 //总人数 #define K 1 //开始数数的人 #define M 3 //间隔的人数 //给数组赋值 void setDate(int a[],int n) { int i; for(i=0;i<n;i++) 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个孩子被剔除。

",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); }

VinaHost,越南vps,国内延时100MS;不限流量100Mbps

vinahost怎么样?vinahost是一家越南的主机商家,至今已经成13年了,企业运营,老牌商家,销售VPS、虚拟主机、域名、邮箱、独立服务器等,机房全部在越南,有Viettle和VNPT两个机房,其中VNPT机房中三网直连国内的机房,他家的产品优势就是100Mbps不限流量。目前,VinaHost商家发布了新的优惠,购买虚拟主机、邮箱、云服务器、VPS超过三个月都有赠送相应的时长,最高送半年...

白丝云-美国圣何塞4837/德国4837大带宽/美西9929,26元/月起

官方网站:点击访问白丝云官网活动方案:一、KVM虚拟化套餐A1核心 512MB内存 10G SSD硬盘 800G流量 2560Mbps带宽159.99一年 26一月套餐B1核心 512MB内存 10G SSD硬盘 2000G流量 2560Mbps带宽299.99一年 52一月套餐...

10gbiz:香港/洛杉矶CN2直连线路VPS四折优惠,直连香港/香港/洛杉矶CN2四折

10gbiz怎么样?10gbiz在本站也多次分享过,是一家成立于2020的国人主机商家,主要销售VPS和独立服务器,机房目前有中国香港和美国洛杉矶、硅谷等地,线路都非常不错,香港为三网直连,电信走CN2,洛杉矶线路为三网回程CN2 GIA,10gbiz商家七月连续推出各种优惠活动,除了延续之前的VPS产品4折优惠,目前增加了美国硅谷独立服务器首月半价的活动,有需要的朋友可以看看。10gbiz优惠码...

约瑟夫问题为你推荐
策略组组策略是什么?tvosTVOS系统是什么?flowplayer如何编译flowplayer源码radius认证如何写一个C#的Radius认证客户端faq是什么意思在国际贸易中“FAQ”代表的是什么意思弹幕网站谁能给我解释一下什么叫A站,什么叫B站?都是啥网站?layoutsubviews如何让NSSplitView的子View的大小固定相似图片搜索如何输入图片并且搜出最相似的图片?jsindexofjavascript 中indexof 的用法基础设施即服务基础设施行业的定义是什么?具体包含哪些行业?
美国虚拟主机购买 域名出售 最便宜的vps bluevm t牌 Dedicated 香港托管 免费个人博客 发包服务器 中国智能物流骨干网 建立邮箱 web服务器的架设 cdn加速是什么 paypal注册教程 支持外链的相册 超级服务器 中国电信测速器 备案空间 阿里云官方网站 cxz 更多