加和一定的随机序列生成方法
来源:互联网 发布:普通网络作家收入 编辑:程序博客网 时间:2024/05/17 23:21
编程中有时会用到的随机数。C语言中主要通过rand()函数来生成随机数。现在我们的问题要更复杂一些,假设有ROW组随机数序列,其中每组序列都由COL个随机数构成,同时还要求每组中的COL个随机数之和为一个定值。例如,我们假设每个随机数是大于等于0并小于1的一个小数(保留小数点后两位有效数字)。在解决这个问题时会重点考察你对C语言中随机数生成方法的理解,同时一些细节上的处理技巧也非常值得关注。
下面这段示例代码演示了上述功能的实现方法(在实现中我们还引入了另外一个特殊的要求,即保证每个随机序列中最后一个随机数是其所在组中的最大值):
#include<stdio.h>#include<stdlib.h>#include<time.h>#define SUM 100#define ROW 100#define COL 5int main(){ srand((unsigned) time(NULL)); //用时间做种,每次产生随机数不一样 unsigned int * sequence = malloc(COL * sizeof(unsigned int)); double ** matrix; matrix = malloc(ROW * sizeof(double*)); for(int j = 0; j < ROW; j++){ unsigned int addup = 0; unsigned int range = 100; for(int i = 0; i < COL-1; i++){ sequence[i] = rand()%range; //产生0-100的随机数 range -= sequence[i]; addup += sequence[i]; } sequence[COL-1] = SUM - addup; matrix[j] = (double*) malloc (sizeof(double) * COL); for(int i = 0; i < COL; i++){ matrix[j][i] = ((double)sequence[i])/SUM; //printf("%.2f ",matrix[j][i]); } //printf("\n"); double tmp = 0.0; for (int i = 0; i < COL-1; i++) { if(matrix[j][i] > matrix[j][i+1]){ tmp = matrix[j][i]; matrix[j][i] = matrix[j][i+1]; matrix[j][i+1] = tmp; } } } for(int j = 0; j < ROW; j++){ for(int i = 0; i < COL; i++) printf("%.2f ",matrix[j][i]); printf("\n"); } free(sequence); sequence = NULL; for (int i = 0; i < ROW; i++) { free(*(matrix + i)); matrix[i] = NULL; } free(matrix); matrix = NULL; return 0;}
执行上述代码可得输出结果如下,可见我们的方法执行得相当不错!
0.04 0.03 0.03 0.01 0.89 0.00 0.00 0.00 0.01 0.99 0.06 0.19 0.01 0.15 0.59 0.22 0.05 0.16 0.01 0.56 0.39 0.11 0.05 0.05 0.40 0.06 0.44 0.00 0.03 0.47 0.00 0.09 0.00 0.02 0.89 0.22 0.07 0.24 0.01 0.46 0.13 0.18 0.01 0.07 0.61 0.36 0.02 0.18 0.08 0.36 0.17 0.03 0.11 0.01 0.68 0.47 0.00 0.00 0.06 0.47 0.14 0.22 0.03 0.04 0.57 0.45 0.05 0.01 0.01 0.48 0.09 0.06 0.01 0.08 0.76 0.35 0.05 0.01 0.01 0.58 0.00 0.16 0.15 0.01 0.68 0.03 0.00 0.02 0.01 0.94 0.11 0.00 0.02 0.07 0.80 0.34 0.16 0.02 0.01 0.47 0.29 0.24 0.05 0.01 0.41 0.07 0.06 0.04 0.02 0.81 0.12 0.18 0.16 0.02 0.52 0.04 0.08 0.23 0.02 0.63 0.13 0.17 0.00 0.02 0.68 0.05 0.02 0.03 0.01 0.89 0.23 0.22 0.07 0.01 0.47 0.22 0.07 0.01 0.07 0.63 0.10 0.03 0.03 0.01 0.83 0.08 0.14 0.09 0.29 0.40 0.17 0.05 0.05 0.08 0.65 0.36 0.09 0.07 0.03 0.45 0.03 0.02 0.00 0.02 0.93 0.01 0.03 0.11 0.07 0.78 0.19 0.00 0.32 0.01 0.48 0.35 0.12 0.14 0.02 0.37 0.06 0.00 0.00 0.01 0.93 0.09 0.09 0.00 0.01 0.81 0.41 0.07 0.04 0.01 0.47 0.05 0.07 0.16 0.06 0.66 0.44 0.01 0.00 0.02 0.53 0.29 0.03 0.00 0.01 0.67 0.15 0.00 0.19 0.24 0.42 0.15 0.31 0.05 0.01 0.48 0.07 0.04 0.03 0.02 0.84 0.00 0.25 0.01 0.07 0.67 0.32 0.06 0.00 0.04 0.58 0.05 0.03 0.06 0.08 0.78 0.12 0.16 0.05 0.30 0.37 0.06 0.05 0.00 0.05 0.84 0.09 0.15 0.11 0.02 0.63 0.16 0.00 0.06 0.02 0.76 0.17 0.01 0.02 0.01 0.79 0.08 0.09 0.02 0.01 0.80 0.19 0.13 0.00 0.01 0.67 0.10 0.00 0.00 0.01 0.89 0.10 0.23 0.08 0.06 0.53 0.32 0.00 0.01 0.02 0.65 0.04 0.27 0.05 0.03 0.61 0.30 0.18 0.00 0.01 0.51 0.33 0.07 0.07 0.15 0.38 0.06 0.06 0.09 0.08 0.71 0.00 0.03 0.44 0.07 0.46 0.35 0.14 0.01 0.01 0.49 0.05 0.01 0.01 0.03 0.90 0.25 0.15 0.06 0.04 0.50 0.01 0.01 0.00 0.02 0.96 0.05 0.10 0.00 0.02 0.83 0.08 0.09 0.06 0.10 0.67 0.07 0.03 0.02 0.02 0.86 0.19 0.24 0.00 0.01 0.56 0.31 0.00 0.04 0.02 0.63 0.18 0.13 0.00 0.01 0.68 0.14 0.10 0.22 0.19 0.35 0.28 0.18 0.03 0.05 0.46 0.08 0.00 0.34 0.12 0.46 0.31 0.01 0.00 0.01 0.67 0.32 0.14 0.01 0.01 0.52 0.22 0.00 0.00 0.02 0.76 0.28 0.15 0.07 0.15 0.35 0.29 0.18 0.09 0.07 0.37 0.14 0.14 0.18 0.22 0.32 0.05 0.12 0.02 0.02 0.79 0.18 0.04 0.00 0.01 0.77 0.10 0.33 0.04 0.04 0.49 0.04 0.12 0.05 0.26 0.53 0.11 0.10 0.25 0.08 0.46 0.41 0.00 0.01 0.04 0.54 0.02 0.08 0.18 0.06 0.66 0.05 0.26 0.07 0.11 0.51 0.21 0.01 0.02 0.36 0.40 0.24 0.13 0.06 0.19 0.38 0.21 0.02 0.00 0.01 0.76 0.04 0.06 0.00 0.01 0.89 0.22 0.13 0.02 0.19 0.44 0.01 0.32 0.08 0.20 0.39 0.11 0.04 0.05 0.15 0.65 0.14 0.01 0.03 0.01 0.81 0.25 0.29 0.08 0.06 0.32 0.28 0.04 0.03 0.09 0.56
(本文完)
4 0
- 加和一定的随机序列生成方法
- c中生成随机序列的方法
- javascript随机生成一定位数的密码
- Shell中生成一定范围内随机整数几种方法
- Java在一定范围随机生成日期和经纬度
- 利用thread和sleep生成字符串的伪随机序列
- 利用thread和sleep生成字符串的伪随机序列
- 随机数生成方法及序列随机排序
- 随机生成生成你的订单号序列
- 使用rand()生成一定范围内的随机小数
- C/C++中生成随机序列——随机函数的选择和自我实现
- 生成随机字符串的方法
- 随机生成数的方法
- 生成序列的方法
- C#随机生成n位数字和字母的方法
- C#生成随机序列
- Java在一定范围随机生成经纬度
- Java在一定范围随机生成经纬度
- I2C
- hadoop2.5.0和hbase0.98完全分布式安装
- SegmentFault 巨献 1024 程序员游戏「红岸的呼唤」第四天任务攻略
- R语言中的SVM
- Android ActionBar应用实战,高仿微信主界面的设计
- 加和一定的随机序列生成方法
- Axure 动态面板实现弹出框效果
- Executors 线程池
- CUP对内存管理精华总(vector机制)
- Windows位图和调色板
- uva--10160+dfs+剪枝
- 模拟电子技术100问
- 已知坐标求多边形面积
- android 学习教程六之----四大组件之一——BroadcastReciever