约瑟夫环的问题,具体到某个编码来解决堪称是不少不少,这里对于约瑟夫环先打个譬如:一辆小巴车被查出严重超车,至多载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
评论