苦练基本功1号三种方法实现约瑟夫环问题
发布时间
阅读量:
阅读量
约瑟夫环问题描述
假设有n个人围成一个环形,按照一定的顺序进行编号,从第一个个体开始依次进行计数,计数范围为1至m。每当有人数达到m时,该个体将被淘汰出圈。随后继续进行下一轮计数,最终需要确定的是,最终留在圈内的是最初编号为多少的个体?
2.数组实现
采用一个长度为n的数组来保存所有个体的编号信息,对于已经退出的个体,将其对应的编号设置为0。当有n-1个个体被移除后,数组中唯一剩余的非零编号即为所求的结果。
#include <stdio.h>
void left_num(int* a,int n,int m) {
int out = 0,count = 0,i = 0; //out为出去的人数,count为报数,i为目前报到第几个人
int *p = a;
int num = 0;
for(num = 0;num < n;num++) {
*(a+num) = num+1;
} //为n个人编号1-n
while (out < n-1) {
if (*(p+i) != 0) {
count ++; //不等于0才报数+!
全部评论 (0)
还没有任何评论哟~
