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

Megalayer促销:美国圣何塞CN2线路VPS月付48元起/香港VPS月付59元起/香港E3独服月付499元起

Megalayer是新晋崛起的国外服务器商,成立于2019年,一直都处于稳定发展的状态,机房目前有美国机房,香港机房,菲律宾机房。其中圣何塞包括CN2或者国际线路,Megalayer商家提供了一些VPS特价套餐,譬如15M带宽CN2线路主机最低每月48元起,基于KVM架构,支持windows或者Linux操作系统。。Megalayer技术团队行业经验丰富,分别来自于蓝汛、IBM等知名企业。Mega...

MechanicWeb免费DirectAdmin/异地备份

MechanicWeb怎么样?MechanicWeb好不好?MechanicWeb成立于2008年,目前在美国洛杉矶、凤凰城、达拉斯、迈阿密、北卡、纽约、英国、卢森堡、德国、加拿大、新加坡有11个数据中心,主营全托管型虚拟主机、VPS主机、半专用服务器和独立服务器业务。MechanicWeb只做高端的托管vps,这次MechanicWeb上新Xeon W-1290P处理器套餐,基准3.7GHz最高...

Sharktech:鲨鱼机房1Gbps无限流量美国服务器;丹佛$49/月起,洛杉矶$59/月起

sharktech怎么样?sharktech鲨鱼机房(Sharktech)我们也叫它SK机房,是一家成立于2003年的老牌国外主机商,提供的产品包括独立服务器租用、VPS主机等,自营机房在美国洛杉矶、丹佛、芝加哥和荷兰阿姆斯特丹等,主打高防产品,独立服务器免费提供60Gbps/48Mpps攻击防御。机房提供1-10Gbps带宽不限流量服务器,最低丹佛/荷兰机房每月49美元起,洛杉矶机房最低59美元...

约瑟夫问题为你推荐
oncontextmenu如何禁用ImageButton的右键?jdk6java—JDK6,在SUN公司官网下载的链接,欢迎页面怎样在开机制造欢迎页面?色库石伟伟怎么写啊数据分析报告范文数据分析报告怎么写菜霸为什么现在都在说生意难做?水表读数家用水表怎么读数mergecellsExcel 合并及计数宏 VBA疫苗之王被称为免疫之王的产品桌面管理系统WIN7如何启用桌面窗口管理器?
江西服务器租用 免费域名解析 中国万网域名 日本软银 t楼 美国翻墙 国外服务器网站 美国主机代购 网通服务器ip 商务主机 空间技术网 架设邮件服务器 上海电信测速 免费ftp iki 服务器硬件配置 脚本大全 512内存 htaccess ping值 更多