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

pacificrack7月美国便宜支持win VPS,$19.99/年,2G内存/1核/50gSSD/1T流量

pacificrack发布了7月最新vps优惠,新款促销便宜vps采用的是魔方管理,也就是PR-M系列。提一下有意思的是这次支持Windows server 2003、2008R2、2012R2、2016、2019、Windows 7、Windows 10,当然啦,常规Linux系统是必不可少的!1Gbps带宽、KVM虚拟、纯SSD raid10、自家QN机房洛杉矶数据中心...支持PayPal、...

DediPath($1.40),OpenVZ架构 1GB内存

DediPath 商家成立时间也不过三五年,商家提供的云服务器产品有包括KVM和OPENVZ架构的VPS主机。翻看前面的文章有几次提到这个商家其中机房还是比较多的。其实对于OPENVZ架构的VPS主机以前我们是遇到比较多,只不过这几年很多商家都陆续的全部用KVM和XEN架构替代。这次DediPath商家有基于OPENVZ架构提供低价的VPS主机。这次四折的促销活动不包括512MB内存方案。第一、D...

PacificRack(年付低至19美元),夏季促销PR-M系列和多IP站群VPS主机

这几天有几个网友询问到是否有Windows VPS主机便宜的VPS主机商。原本他们是在Linode、Vultr主机商挂载DD安装Windows系统的,有的商家支持自定义WIN镜像,但是这些操作起来特别效率低下,每次安装一个Windows系统需要一两个小时,所以如果能找到比较合适的自带Windows系统的服务器那最好不过。这不看到PacificRack商家有提供夏季促销活动,其中包括年付便宜套餐的P...

约瑟夫问题为你推荐
g2g吉他的效果器的名称是什么意思?(G1G,G2G等等)settimerSetTimer()和OnTimer()函数的作用范围查字网拐字换什么偏旁 成新字网关和路由器的区别网关和路由器的具体区别在哪里呀?deviceidAndroid里DeviceId和AndroidId都是什么意思?备忘录模式为什么我的华为手机界面总是有个框框在备忘录上面arc是什么意思数学中的arctan是什么意思vipjrvipjr跟哒哒英语比,两家公司的区别在哪里?各自的特点有哪些?微信论坛手机微信论坛如何实现ruby语言公司实习让我学习RUBY语言,不知道RUBY语言发展前景怎么样,值不值的去学习。
n点虚拟主机管理系统 kdata 国外idc 谷歌香港 三拼域名 域名转向 国外视频网站有哪些 最漂亮的qq空间 闪讯官网 google台湾 ebay注册 个人免费邮箱 photobucket 主机返佣 cdn服务 汤博乐 开心online 百度新闻源申请 服务器是什么意思 easypanel 更多