来源:
最近逛博客,看到有人说面试是遇到问约瑟夫环问题。。。
“约瑟夫”是谁?约瑟夫环又是什么鬼?于是不耻下问(不以不知道大家都知道的知识为耻-_-||)的我去百度了下;
哦,原来就是个一直转圈的丢手绢游戏。。。
正好最近在学习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";
}
}