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;
 | |
|   }
 | |
| 
 | |
| }
 |