C语言实现猴子选大王(约瑟夫问题)



这里使用数组模拟循环链表

#include <stdio.h>int main(){int leftCount = 15;//剩余猴子的数量int countNum = 0; //目前数到了第几个int index = 0; //定义当前数组的下标从0开始。int number = 7;//数到第七个猴子就退出int a[15];//一共15个猴子int k, i;//先初始化,让所有的都为1for(i = 0; i < 15; i++){a[i] = 1;}

//然后每踢出去一个就在剩下的总数里减一,//那么当剩下的总数是一的时候,//那么就说明找到了已经找到了大王while(leftCount != 1){//当元素是1的时候就进行计数,//当这个数量达到7的时候就说明,该把第七个踢出去了if(a[index] == 1){//如果当前剩余猴子的数量大于1,//然后标记还为1,那么就在计数器中加1countNum++;//计数器的数和设定被踢出的猴子的数目相同的时候,//踢出猴子,把标记改为0if(countNum == 7){countNum = 0; //刷新计数器,初始化为0a[index] = 0; //改变当前的标记为0leftCount–; //在剩余的猴子里面减一}}//每次判断完一个元素,数组的下标就加一index ++; //当判断到数组的末尾的时候,这里模拟循环链表,//链表的尾部,,接着头部,那么这里数组的尾部,就接着头部//就把数组的最后面的元素的后一个元素的下标变为0,//也就是又回到了第一个元素if(index == 15){index = 0;}}

//到此为止已经找到了大王,//那么只有元素为1的猴子才是大王。//那么就循环查找那个是1?for(k = 0; k < 15; k++){if(a[k] == 1){printf("%d", k + 1);}}return 0;}

快乐要懂得分享,才能加倍的快乐

C语言实现猴子选大王(约瑟夫问题)

相关文章:

你感兴趣的文章:

标签云: