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

香港服务器多少钱一个月?香港云服务器最便宜价格

香港服务器多少钱一个月?香港服务器租用配置价格一个月多少,现在很多中小型企业在建站时都会租用香港服务器,租用香港服务器可以使网站访问更流畅、稳定性更好,安全性会更高等等。香港服务器的租用和其他地区的服务器租用配置元素都是一样的,那么为什么香港服务器那么受欢迎呢,香港云服务器最便宜价格多少钱一个月呢?阿里云轻量应用服务器最便宜的是1核1G峰值带宽30Mbps,24元/月,288元/年。不过我们一般选...

青云互联-洛杉矶CN2弹性云限时五折,9.5元/月起,三网CN2gia回程,可选Windows,可自定义配置

官方网站:点击访问青云互联官网优惠码:五折优惠码:5LHbEhaS (一次性五折,可月付、季付、半年付、年付)活动方案:的套餐分为大带宽限流和小带宽不限流两种套餐,全部为KVM虚拟架构,而且配置都可以弹性设置1、洛杉矶cera机房三网回程cn2gia 洛杉矶cera机房                ...

SugarHosts新增Windows云服务器sugarhosts六折无限流量云服务器六折优惠

SugarHosts糖果主机商我们较早的站长们肯定是熟悉的,早年是提供虚拟主机起家的,如今一直还在提供虚拟主机,后来也有增加云服务器、独立服务器等。数据中心涵盖美国、德国、香港等。我们要知道大部分的海外主机商都只提供Linux系统云服务器。今天,糖果主机有新增SugarHosts夏季六折的优惠,以及新品Windows云服务器/云VPS上线。SugarHosts Windows系统云服务器有区分限制...

约瑟夫问题为你推荐
xclient什么是xCLient 802.1x 以及能用来做什么 怎么使用 要详细答案g2g吉他的效果器的名称是什么意思?(G1G,G2G等等)fclose为什么fclose之后remove还是不成功索引超出了数组界限索引超出了数组界限丁奇海贼王里“D”的意思是什么?radius认证如何写一个C#的Radius认证客户端smartuploadjspsmartupload如何使用?smartupload为什么使用smartupload执行上传保存操作时用这句smart.save("upload")失败用smart.save("/upload")成功色库photoshop7.0怎么改PANTONE色号清除电脑垃圾怎样清除电脑里的垃圾
日本vps 免费vps 荷兰vps linuxapache虚拟主机 老左 buyvm liquidweb softlayer 嘟牛 合肥鹏博士 爱奇艺vip免费领取 google台湾 登陆空间 cdn网站加速 金主 xuni 江苏徐州移动 小夜博客 沈阳idc 海外加速 更多