C版的迷你程序——数组实现约瑟夫环

小微 科技C版的迷你程序——数组实现约瑟夫环已关闭评论126字数 904阅读模式
摘要约瑟夫环的问题,具体到某个编码来解决可谓是很多很多,这里对于约瑟夫环先打个比方:一辆小巴车被查出严重超车,最多载10人的超载至30人。于是乘客下车排成一队,排队的位置即为他们的编号...

约瑟夫环的问题,具体到某个编码来解决堪称是不少不少,这里对于约瑟夫环先打个譬如:一辆小巴车被查出严重超车,至多载10人的超载至30人。于是乘客下车排成一队,排队的位置即为他们的编号。然后就是报数,从1开始,数到6的人被支配滞后乘车。如斯循环,直到不超过 10 人为止,问都有哪些编号的人需要下车了,哪些编号可以乘车?固然这里只斟酌仅有一辆车的情况哈,至于后续车以及后续登车的问题不做斟酌哈。

Python版的迷你程序——约瑟夫环文章源自微观生活(93wg.com)微观生活-https://93wg.com/17582.html

这里用了C的数组实现,编号以及数组索引逐一对应了,每一次移除了了的编号使用数组元素的值变成0来匹配。文章源自微观生活(93wg.com)微观生活-https://93wg.com/17582.html

#include <stdio.h>void joseph(int* arrlist, int totalnum, int step, int staynum){ int i = 1; int count = 0; int checkcnt = 0; while(1) { if(1==arrlist[i]) checkcnt++; if(checkcnt==step){ count++; arrlist[i] = 0; /* flag = 0 */ printf("%-3d号下车了\\n", i); checkcnt=0; } if((totalnum-1-count)<=staynum) break; i++; if(i==totalnum) i = 1; }}#define N 30+1int main(){ int i; int arr[N]; int cnt=0; /* init */ printf("初始化:"); for (i=1; i<N; i++) arr[i] = 1; for (i=1; i<N; i++) printf("%3d ", arr[i]); printf("\\n"); joseph(arr, N, 6, 10); printf("编号: "); for (i=1; i<N; i++) { if(1==arr[i]) { printf("%3d ", i); cnt++; } } printf("\\t 留下.\\n"); printf("最后留下%3d人" , cnt); printf("\\n"); return 0; }文章源自微观生活(93wg.com)微观生活-https://93wg.com/17582.html

以上就是微观生活(93wg.com)关于“C版的迷你程序——数组实现约瑟夫环”的详细内容,希望对大家有所帮助!文章源自微观生活(93wg.com)微观生活-https://93wg.com/17582.html 文章源自微观生活(93wg.com)微观生活-https://93wg.com/17582.html

继续阅读
 
小微
  • 版权声明: 本文部分文字与图片资源来自于网络,转载此文是出于传递更多信息之目的,若有来源标注错误或侵犯了您的合法权益,请立即通知我们(管理员邮箱:81118366@qq.com),情况属实,我们会第一时间予以删除,并同时向您表示歉意,谢谢!
  • 转载请务必保留本文链接:https://93wg.com/17582.html