设计一“真随机数”函数:int MyRandom(int n,int m); 功能:n<m,随机产生n~m之间的整数,要求每次调用返回一随机数,均匀分布在n~m之间,注意程序每次运行,其产生的随机数是不同的。
时间: 2024-03-24 17:38:36 浏览: 20
好的,我来设计一个“真随机数”函数。
首先,我们需要利用系统时间作为随机种子,以保证每次程序运行时产生的随机数是不同的。然后,我们可以利用rand()函数生成一个0到RAND_MAX之间的随机数,再将其映射到n~m之间的整数。
具体实现如下:
```c++
#include <cstdlib>
#include <ctime>
int MyRandom(int n, int m) {
srand((unsigned) time(NULL)); // 以系统时间作为随机种子
int rand_num = rand(); // 生成0到RAND_MAX之间的随机数
int range = m - n + 1; // 计算n~m之间的整数范围
int result = n + rand_num % range; // 映射到n~m之间的整数
return result;
}
```
这样,每次调用MyRandom函数时,都能够返回一个均匀分布在n~m之间的随机整数。
相关问题
主函数:随机产生m个100~200之间的整数,存放于一维数组中。调用子函数进行右移n位操作
好的,下面是一个实现随机产生m个100~200之间的整数,并进行逻辑右移n位的示例代码:
```c++
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
void shiftRight(unsigned int arr[], int size, int n) {
for(int i = 0; i < size; i++) {
arr[i] >>= n;
}
}
int main() {
const int M = 10; // 产生10个随机数
const int N = 2; // 右移2位
unsigned int arr[M];
srand(time(0)); // 随机数种子
for(int i = 0; i < M; i++) {
arr[i] = rand() % 101 + 100; // 产生100~200之间的随机数
cout << arr[i] << " ";
}
cout << endl;
shiftRight(arr, M, N);
for(int i = 0; i < M; i++) {
cout << arr[i] << " ";
}
cout << endl;
return 0;
}
```
这个程序中,我们首先定义了常量M和N,分别表示产生10个随机数和右移2位。然后我们使用srand和time函数来设置随机数种子,使用rand函数产生100~200之间的随机数,并将它们存放在unsigned int类型的数组arr中。接着我们调用了shiftRight函数,将arr数组中的所有元素逻辑右移N位。最后我们输出右移后的结果。
要求使用指定子函数 void MoveData(int a[],int n,int m)
好的,下面是使用指定子函数 `MoveData` 实现的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 10
// 生成随机数
int rand_num(int min, int max) {
return rand() % (max - min + 1) + min;
}
// 打印数组
void print_array(int arr[], int len) {
for (int i = 0; i < len; i++) {
printf("%d ", arr[i]);
}
printf("\n");
}
// 移动数组元素
void MoveData(int a[], int n, int m) {
// 新数组
int new_arr[N];
// 把第1到第m个元素移动到原数组后端的新数组
for (int i = m; i < n; i++) {
new_arr[i-m] = a[i];
}
for (int i = 0; i < m; i++) {
new_arr[n-m+i] = a[i];
}
// 把新数组复制回原数组
for (int i = 0; i < n; i++) {
a[i] = new_arr[i];
}
}
int main() {
// 生成随机数组
int arr[N];
srand(824);
for (int i = 0; i < N; i++) {
arr[i] = rand_num(0, 100);
}
printf("随机数组为:");
print_array(arr, N);
// 移动数组元素
int m;
printf("请输入要移动的位置m:");
scanf("%d", &m);
MoveData(arr, N, m);
// 打印新数组
printf("移动后的数组为:");
print_array(arr, N);
return 0;
}
```
运行结果示例:
```
随机数组为:16 14 75 45 46 70 4 72 91 2
请输入要移动的位置m:4
移动后的数组为:70 4 72 91 2 16 14 75 45 46
```