• 约瑟夫问题(数组实现)


    据说著名犹太历史学家 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);

    }

    }
  • 相关阅读:
    springsecurity 企业微信登入
    生产级 日志系统配置,日志分类 多索引模式
    泛型探秘
    内存结构和内存模型
    垃圾回收
    类字节码分析和类加载机制
    JVM问题排查
    成也Titanium,败也Titanium之cons
    Zip 解压缩
    VS2022支持Net4.0,Net4.5开发
  • 原文地址:https://www.cnblogs.com/zhangjiang/p/2396125.html
Copyright © 2020-2023  润新知