随机数-抽号

1、简介
      1. 编程 samp.c,实现从 n个记录中随机抽取 m个记录。
2、算法
      1)function(n, m):
        输入:整数 n, m
        输出:data[m],每个元素随机取值 0~n-1,且各各不同
        辅助数组 mark[n]
      2)for i = 0…n:
        mark[i] = 0
      3)重复,使得有 s中有 m个元素等于 1:
        k = random() % n
        mark[k] = 1
      4) 将 s中元素为 1者的下标记录到 a中
      5)如 n = 16, m = 4,
        第2)步后:mark = {0,0,0,1, 1,0,0,0, 0,0,0,1, 0,0,0,1,0},
        则第3)步后:data = {3, 4, 11, 15}。
3、代码实现

#include <stdio.h>
#include <stdlib.h>

#define N 46    //数据个数
#define M 64    //数据长度

char data[N][M];    //存取文件读取的数据
int mark[N];    //标记数组

//数据抽取数据函数
void fuction(int n, int m) {
    int i, j, k, count;
    for (i = 0; i < N; ++i) {  //初始化标记数组
        mark[i] = 0;
    }
    for (i = 0; i < m; ++i) {
        k = random() % n;   //产生m个随机数
        mark[k] = 1;
    }
}

//输出函数
void output() {
    int i;
    for (i = 0; i < N; ++i) {
        if (mark[i] == 1) {
            printf("%d: %s", i, data[i]);
        }
    }
}

//主函数
int main(int argc, char *argv[]) {
    if (argc < 1)
        return 0;
    int n, m, i = 0;
    n = atoi(argv[1]);    //数据总数
    m = atoi(argv[2]);    //随机抽取的个数
    srand(time());    //使每一次都产生不同随机序列
    while (fgets(data[i], M, stdin) > 0) {    //读取数据
        i++;
    }
    fuction(n, m);
    output();
}

4、相关文件:Github

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值