49 lines
1.1 KiB
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;
|
|
}
|
|
|
|
}
|