定义一个数组,长度为98,每个元素随机赋值为1~100的整数,每个元素不能重复,求1~100中哪两个值没有被赋值,并输出
时间: 2023-09-14 21:05:50 浏览: 44
可以使用Fisher–Yates shuffle算法来生成一个不重复的随机数组。具体步骤如下:
1. 首先生成一个包含1~100的整数数组arr。
2. 对于i从n-1到1,每次随机生成一个0~i的整数j,然后将arr[i]与arr[j]交换。这个过程保证了前i个元素是随机排列的,并且不会有重复出现。
3. 最后取出前98个元素作为结果。
代码如下:
```python
import random
arr = list(range(1, 101))
n = len(arr)
for i in range(n - 1, 0, -1):
j = random.randint(0, i)
arr[i], arr[j] = arr[j], arr[i]
result = arr[:98]
missing = set(range(1, 101)) - set(result)
print("缺失的元素为:", missing)
```
输出:
```
缺失的元素为: {59, 74}
```
这表示在生成的随机数组中,59和74这两个数没有出现过。
相关问题
java定义一个数组,长度为98,每个元素随机赋值为1~100的整数,每个元素不能重复,求1~100中哪两个值没有被赋值,并输出
以下是Java代码实现:
```java
public class Main {
public static void main(String[] args) {
int[] arr = new int[98];
boolean[] flag = new boolean[100];
// 初始化标志数组
for (int i = 0; i < flag.length; i++) {
flag[i] = false;
}
// 随机赋值
for (int i = 0; i < arr.length; i++) {
int num = (int) (Math.random() * 100) + 1;
if (!flag[num - 1]) { // 判断该数是否已经赋值
arr[i] = num;
flag[num - 1] = true;
} else {
i--; // 如果已经赋值,则重新赋值
}
}
// 查找未赋值的数
int miss1 = -1, miss2 = -1;
for (int i = 0; i < flag.length; i++) {
if (!flag[i]) {
if (miss1 == -1) {
miss1 = i + 1;
} else {
miss2 = i + 1;
break;
}
}
}
// 输出结果
System.out.println("缺失的数为:" + miss1 + " 和 " + miss2);
}
}
```
首先定义一个长度为98的数组,用于存储随机生成的数,同时定义一个长度为100的布尔型数组,用于标记1~100中已经赋值的数。然后,先将标志数组初始化为false,表示所有的数都没有被赋值。
接着,通过循环生成随机数,并判断该数是否已经赋值。如果未赋值,则将该数赋值给数组,并将标志数组对应位置的值设为true;如果已经赋值,则重新生成随机数。这样可以保证每个元素的值都是不重复的。
最后,再遍历标志数组,查找未被赋值的数,即为缺失的数。
运行程序,会输出缺失的数。
Java让数组每个元素随机赋一个1到100的值
您可以使用Java中的Random类和for循环来随机赋值数组中的每个元素,代码示例如下:
```java
import java.util.Random;
public class Main {
public static void main(String[] args) {
int[] arr = new int[10]; // 定义一个长度为10的数组
Random random = new Random(); // 创建一个Random对象
for (int i = 0; i < arr.length; i++) {
arr[i] = random.nextInt(100) + 1; // 生成1到100之间的随机数并赋值给数组元素
}
System.out.println(Arrays.toString(arr)); // 打印数组
}
}
```
这段代码将生成一个长度为10的数组,并将每个元素随机赋值为1到100之间的整数,最后打印数组。