web_synchronization_tool/lib/windows/number_tool.dart

49 lines
1.1 KiB
Dart

import 'dart:math';
class NumberTool {
/// 生成随机数
/// @allNum: 随机数的和
/// @num: 随机数的数量
List<int> randomNum(int allNum, {int num = 10}) {
Random random = Random();
// 基础数字 最小值
int base = allNum ~/ 1.5 ~/ num;
List<int> numbers = List.generate(num, (index) => base);
for (int i = 0; i < num - 1; i++) {
int randomNumber = random.nextInt(base); // 生成0到base之间的随机整数
numbers[i] += randomNumber;
}
int sum = numbers.reduce((a, b) => a + b) ;
int lastNumber = allNum - sum;
// 将最后一个数 /2 再/数量 取整数
base = (lastNumber / 2) ~/ (num);
for (int i = 0; i < num - 1; i++) {
numbers[i] += base;
}
sum = numbers.reduce((a, b) => a + b);
lastNumber = allNum - sum;
// 将最后一个数 切一半 随机加到数组中
base = lastNumber ~/ 2;
numbers[ random.nextInt(num - 1)] = base;
sum = numbers.reduce((a, b) => a + b);
lastNumber = allNum - sum;
numbers.add(lastNumber);
// 打乱顺序
numbers.shuffle();
return numbers;
}
}