Dart实现约瑟夫环问题

2020-12-29  本文已影响0人  IT景隆

来源:

最近逛博客,看到有人说面试是遇到问约瑟夫环问题。。。

“约瑟夫”是谁?约瑟夫环又是什么鬼?于是不耻下问(不以不知道大家都知道的知识为耻-_-||)的我去百度了下;

哦,原来就是个一直转圈的丢手绢游戏。。。

正好最近在学习Flutter,于是就试着用Dart语言来写下这个东东

代码:

import 'package:flutter_test/flutter_test.dart';

/// 也可以使用命令来运行 flutter test test/counter_test.dart

void main() {
  // 单一的测试
  test("测试约瑟夫环问题", () {
    Joseph.circle();
  });
}

class Joseph {
  static void circle() {
    //初始化数据
    List<Person> list = new List();
    num totalPerson = 30;
    num startNum = 0;
    num count = 6;
    for (int i = 0; i < totalPerson; i++) {
      list.add(new Person("约瑟夫$i号", i + 1, false));
    }

    int position = 0, c = 0, k = 0;
    while (k < list.length) {
      if (!list[position].killed) {
        c++;
      }
      if (c == count) {
        list[position].killed = true;
        c = 0;
        k++;
        var name = list[position].name;
        var po = list[position].position;
        print("当前被杀$name 位于$po 号位置");
      }
      if (position >= list.length - 1){
        position = 0;
        print("新一轮:\n");}
      else
        position++;
    }
    print(list);
  }
}

class Person {
  String name;
  int position;
  bool killed;

  Person(this.name, this.position, this.killed);
  @override
  String toString() {
    return "\n 姓名:$name  位置$position  是否被杀:$killed";
  }
}

来源:IT景隆 http://www.itjl.top:90

上一篇下一篇

猜你喜欢

热点阅读