随机生成n个不重复的正整数

此博客展示了如何使用VBA编程语言通过循环和条件判断来生成指定数量的随机正整数,并确保这些整数不重复,最后将生成的整数以逗号分隔的形式显示出来。

Dim a() As Integer 'a是用来存放生成的n个随机正整数

 

Private Sub Command1_Click()

n = InputBox("请输入一个正整数n,n>=1")

ReDim a(1 To n)

Dim p As String 'p表示随机生成的n个整数

Randomize

p = ""

For i = 1 To n '生成n个整数

Do

  x = Int(Rnd * 90) + 10 '存放中间生成的一个随机数,范围是099,包括0也包括99

  yes = 0 '用来判断生成的x要还是不要,0表示要,1表示不要

  For j = 1 To i - 1 '对要生成的第i个速技术进行检测,检测结果放在yes

     If x = a(j) Then yes = 1: Exit For

  Next

Loop While yes = 1

a(i) = x

p = p & Str(a(i)) & ","

Next

Label1.Caption = LTrim(Left(p, Len(p) - 1)) 'label1显示最终的随机生成的n个随机整数

 

End Sub

<think>我们要求生成100个小于300且重复正整数。由于数字范围是1到299(因为小于300的正整数,且要求重复),我们需要生成100个在1到299之间的唯一整数。 注意:因为要求重复,所以我们需要确保每个数字只出现一次。我们可以先生成一个1到299的数组,然后打乱这个数组,取前100个。 步骤: 1. 创建一个包含1到299的数组。 2. 打乱这个数组(洗牌算法)。 3. 取前100个元素。 在TypeScript中,我们可以这样实现: 但是注意:TypeScript是JavaScript的超集,所以我们可以使用JavaScript的数组方法。 洗牌算法(Fisher-Yates算法)可以高效且随机地打乱数组。 代码示例:</think>### 生成100个唯一随机正整数(小于300)的TypeScript实现 ```typescript function generateUniqueRandomNumbers( count: number, max: number ): number[] { // 参数校验 if (count > max) { throw new Error("请求数量超过可用数字范围"); } // 创建包含1到299的有序数组 const numbers = Array.from({ length: max }, (_, i) => i + 1); // Fisher-Yates洗牌算法实现随机化 for (let i = numbers.length - 1; i > 0; i--) { const j = Math.floor(Math.random() * (i + 1)); [numbers[i], numbers[j]] = [numbers[j], numbers[i]]; } // 返回前100个元素 return numbers.slice(0, count); } // 调用函数生成结果 const uniqueNumbers = generateUniqueRandomNumbers(100, 299); console.log(uniqueNumbers); ``` #### 关键实现说明: 1. **范围定义**:生成`1`到`299`(包含)的正整数,满足小于300的要求 2. **唯一性保证**:通过创建有序数组后洗牌,确保无重复值 3. **高效随机化**:使用Fisher-Yates洗牌算法,时间复杂度$O(n)$ 4. **参数校验**:检查请求数量是否超过可用数字范围 5. **类型安全**:TypeScript确保输出为`number[]`类型数组 #### 使用示例: ```typescript // 生成结果验证 console.log("生成数量:", uniqueNumbers.length); // 100 console.log("最大值:", Math.max(...uniqueNumbers)); // <=299 console.log("最小值:", Math.min(...uniqueNumbers)); // >=1 console.log("是否重复:", new Set(uniqueNumbers).size === 100); // true ``` #### 性能特点: - 生成1000个数字仅需约1ms(现代JS引擎) - 内存占用固定(仅299个元素的数组) - 无递归风险(适合大范围操作)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值