Dart实现约瑟夫环问题

Dart实现约瑟夫环问题


IT景隆http://www.itjl.top:90
来源:
最近逛博客,看到有人说面试是遇到问约瑟夫环问题。。。

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

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

正好最近在学习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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值