用c语言写求随机数分布情况,主程序中循环调用10000次MyRandom(1,100)
时间: 2024-03-26 19:38:49 浏览: 12
可以使用数组来记录随机数分布情况。具体实现可以参考以下代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 10000
int MyRandom(int min, int max)
{
return rand() % (max - min + 1) + min;
}
int main()
{
int i, num, dist[100] = {0};
srand(time(NULL));
for (i = 0; i < N; i++) {
num = MyRandom(1, 100);
dist[num-1]++;
}
for (i = 0; i < 100; i++) {
printf("%d: %d\n", i+1, dist[i]);
}
return 0;
}
```
这段代码中,我们使用了一个长度为100的数组dist来记录每个随机数出现的次数。在循环调用MyRandom函数时,我们将得到的随机数作为数组下标来增加相应元素的值。最后再遍历整个数组,输出每个随机数出现的次数。注意,这里的随机数范围是1到100,而数组下标是从0到99,因此在对数组元素进行操作时需要注意下标的转换。
相关问题
② 主程序中循环调用10000次MyRandom(1,100),求随机数分布情况。如: 1:102次 2:95次 3:98次 … 100:94次 并输出随机数落在1-50区间和51-100区间的次数。如: 1-50: 5010次 51-100: 4990次
好的,我明白了,这是一个关于随机数分布的问题。我可以为您编写一个程序来模拟这个过程,然后输出结果。以下是一个可能的解决方案:
```python
import random
def MyRandom(start, end):
return random.randint(start, end)
freq = [0] * 100
for i in range(10000):
r = MyRandom(1, 100)
freq[r-1] += 1
for i in range(100):
print("{}: {}".format(i+1, freq[i]))
count1 = 0
count2 = 0
for i in range(10000):
r = MyRandom(1, 100)
if r <= 50:
count1 += 1
else:
count2 += 1
print("1-50: {}\n51-100: {}".format(count1, count2))
```
输出结果应该类似于:
```
1: 98
2: 95
3: 99
4: 100
5: 102
6: 103
7: 91
8: 89
9: 96
10: 96
11: 95
12: 89
13: 99
14: 105
15: 85
16: 100
17: 90
18: 105
19: 89
20: 103
21: 96
22: 88
23: 104
24: 97
25: 92
26: 98
27: 98
28: 81
29: 107
30: 100
31: 101
32: 88
33: 98
34: 108
35: 99
36: 91
37: 96
38: 86
39: 90
40: 112
41: 107
42: 110
43: 101
44: 103
45: 92
46: 102
47: 102
48: 94
49: 97
50: 93
51: 98
52: 110
53: 93
54: 111
55: 91
56: 95
57: 96
58: 110
59: 110
60: 92
61: 96
62: 86
63: 106
64: 100
65: 94
66: 99
67: 93
68: 94
69: 92
70: 105
71: 92
72: 94
73: 98
74: 109
75: 97
76: 88
77: 106
78: 94
79: 101
80: 100
81: 98
82: 103
83: 101
84: 95
85: 88
86: 96
87: 100
88: 98
89: 99
90: 88
91: 107
92: 92
93: 93
94: 97
95: 94
96: 99
97: 103
98: 98
99: 93
100: 95
1-50: 4965
51-100: 5035
```
其中,前100行分别表示随机数1-100的出现次数,最后两行表示随机数落在1-50区间和51-100区间的次数。
使用上述的函数完成这样的问题: 主程序中循环调用10000次MyRandom(1,100),求随机数分布情况。如: 1:102次 2:95次 3:98次 … 100:94次 并输出随机数落在1-50区间和51-100区间的次数。如: 1-50: 5010次 51-100: 4990次
好的,让我根据您的要求补充一下程序:
```c
#include <stdio.h>
int MyRandom(int n, int m);
int main() {
int count[100] = {0}; // 初始化每个数字出现的次数为0
for (int i = 0; i < 10000; i++) {
int num = MyRandom(1, 100); // 产生1~100之间的随机数
count[num - 1]++; // 对应数字出现的次数加1
}
printf("随机数分布情况:\n");
for (int i = 0; i < 100; i++) {
printf("%d: %d次\n", i + 1, count[i]);
}
int count1 = 0, count2 = 0;
for (int i = 0; i < 100; i++) {
if (i < 50) {
count1 += count[i];
} else {
count2 += count[i];
}
}
printf("1-50: %d次\t51-100: %d次\n", count1, count2);
return 0;
}
int MyRandom(int n, int m) {
static int initialized = 0;
if (!initialized) {
srand(time(NULL)); // 使用当前时间作为种子,初始化随机数发生器
initialized = 1;
}
int range = m - n + 1;
return n + rand() % range;
}
```
该程序的执行流程如下:
1. 首先,我们定义一个长度为100的数组count,用于记录每个数字出现的次数,初始化为0。
2. 然后,我们循环调用10000次MyRandom函数,每次产生1~100之间的随机数,并将对应数字出现的次数加1。
3. 接着,我们输出每个数字出现的次数,以及落在1~50和51~100区间的次数。
4. 最后,我们返回程序结束。
需要注意的是,为了方便统计落在1~50和51~100区间的次数,我们在输出每个数字出现的次数时,将数字的下标加1。这样,count[i]即表示数字i+1出现的次数。
希望我的回答能够帮助您解决问题。如果您还有其他问题,请随时提问。