源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

约瑟夫环问题(数组法)c语言实现

  • 时间:2020-10-25 22:13 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:约瑟夫环问题(数组法)c语言实现
问题说明 这个问题是以弗拉维奥·约瑟夫斯命名的,它是1世纪的一名犹太历史学家。他在自己的日记中写道,他和他的40个战友被罗马军队包围在洞中。他们讨论是自杀还是被俘,最终决定自杀,并以抽签的方式决定谁杀掉谁。约瑟夫斯和另外一个人是最后两个留下的人。约瑟夫斯说服了那个人,他们将向罗马军队投降,不再自杀。约瑟夫斯把他的存活归因于运气或天意,他不知道是哪一个机智的约瑟夫!     有N个编号为1~N的人围成一圈,现在每隔两个人(比如:1、4 之间隔了2、3)就将一个人淘汰出去,问最后剩下的是编号为几的人? 算法代码如下
[u]复制代码[/u] 代码如下:
#include <stdio.h> #include <stdlib.h> int main(void) {     int people_count = 0;     int *peoples = NULL;     printf("please input people number: ");     scanf("%d", &people_count);     if (people_count < 2){         printf("can't do Joseph\n");     }     peoples = (int *)calloc(people_count, sizeof(int));     int i;     for(i = 0; i < people_count; i++){         peoples[i] = i+1;     }     i = 0;     int j = 0;     int rest = people_count;     while(rest){         if (i >= people_count){             i %= people_count;         }         if (peoples[i] == 0){             i++;             continue;         }         if (j++ % 3 ==0 && rest > 1){             printf("kill people NO. %d\n", peoples[i]);             peoples[i] = 0;             rest--;         }else if (rest==1){             printf("NO. %d is alive\n", peoples[i]);             rest--;         }         i++;     }     system("pause");     return 0; }
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部