| 
									
										
										
										
											2024-04-03 14:36:36 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | import 'dart:math'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class NumberTool { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   /// 生成随机数
 | 
					
						
							|  |  |  |   /// @allNum: 随机数的和
 | 
					
						
							|  |  |  |   /// @num: 随机数的数量
 | 
					
						
							|  |  |  |   List<int> randomNum(int allNum, {int num = 10}) { | 
					
						
							| 
									
										
										
										
											2024-04-03 21:53:27 +08:00
										 |  |  |     Random random = Random(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // 基础数字 最小值
 | 
					
						
							|  |  |  |     int base = allNum ~/ 1.5 ~/ num; | 
					
						
							|  |  |  |     List<int> numbers = List.generate(num, (index) => base); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-04-03 14:36:36 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     for (int i = 0; i < num - 1; i++) { | 
					
						
							| 
									
										
										
										
											2024-04-03 21:53:27 +08:00
										 |  |  |       int randomNumber = random.nextInt(base); // 生成0到base之间的随机整数
 | 
					
						
							|  |  |  |       numbers[i] += randomNumber; | 
					
						
							| 
									
										
										
										
											2024-04-03 14:36:36 +08:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-04-03 21:53:27 +08:00
										 |  |  |     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(); | 
					
						
							| 
									
										
										
										
											2024-04-03 14:36:36 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-04-03 21:53:27 +08:00
										 |  |  |     return numbers; | 
					
						
							| 
									
										
										
										
											2024-04-03 14:36:36 +08:00
										 |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | } |