zoukankan      html  css  js  c++  java
  • 约瑟夫问题(数组实现)

    据说著名犹太历史学家 Josephus有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止。然而Josephus 和他的朋友并不想遵从,Josephus要他的朋友先假装遵从,他将朋友与自己安排在第16个与第31个位置,于是逃过了这场死亡游戏。

    约瑟夫问题是典型的循环链,但也可用数组实现。

    static void Jproblem(int n, int k)

    {

    int[] array = new int[n];

    Console.WriteLine("initial the array");

    for (int j = 0; j < n; j++)

    {

    array[j] = 1;

    }



    bool end = false;

    int i = 1;

    int currentPostion = 0;

    while (!end)

    {

    if (array[currentPostion] == 1)

    {

    i++;

    }

    if (currentPostion == n - 1) // if max, then go to 0

    {

    currentPostion = 0;

    }

    else

    {

    currentPostion++;

    }



    if (i > k)

    {

    array[currentPostion] = 0;//delete it

    i = 1;

    }

    // sum

    int sum = 0;

    foreach (int a in array) // 如何sum小于K,说明程序应该结束了

    {

    sum += a;

    }

    if (sum < k)

    {

    end = true;

    }

    }

    for (int j = 0; j < n; j++)

    {

    if (array[j] == 1)

    {

    Console.WriteLine(j);

    }

    }
  • 相关阅读:
    postfix 邮件中继配置
    shell脚本网络流量实时查看
    zabbix配置邮件报警(第四篇)
    pptp服务故障
    Centos6.7 ELK日志系统部署
    rrdtool 实践
    Centos6.7安装Cacti教程
    Nagios事件机制实践
    Nrpe 插件安装教程
    如何查找一个命令由哪个rpm安装&&rpm 的相关查询方法
  • 原文地址:https://www.cnblogs.com/zhangjiang/p/2396125.html
Copyright © 2011-2022 走看看