首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

大婶们帮忙看看这个段异常,生成0到n之间的k个不重复随机数

2013-11-01 
大婶们帮忙看看这个段错误,生成0到n之间的k个不重复随机数/** * 生成1000 0000个[100 0000, 999 9999]之间

大婶们帮忙看看这个段错误,生成0到n之间的k个不重复随机数
/**
 * 生成1000 0000个[100 0000, 999 9999]之间的不重复的数
 * */
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

unsigned bigrand();
unsigned randint(int l, int u);
void     swap(int *a,int *b);

int main(int argc,char* argv[])
{
    int num[10000000];
    int i;
    FILE *fp = fopen("rand_num_file.txt","a+");
    if(fp == NULL)
    {
        printf("cannot open this file!\n");
        exit(0);
    }
    srand((unsigned)time(NULL));
    
    for(i=0; i<10000000; i++)
        num[i] = i;
    for(i=0; i<1000000; i++)
    {
        swap(&num[i],&num[randint(1000000,10000000-1)]);
        fprintf(fp,"%d\n",num[i]);
    }
    fclose(fp);
    return 0;
}

/* 
 * 生成大随机数(30位)
 **/
unsigned int bigrand()
{
    return rand()*RAND_MAX + rand();
}

/* 
 * 生成[l,m]之间的随机数
 **/
unsigned int randint(int l, int u)
{
    return l + bigrand() % (u-l+1);
}

//交换
void swap(int *a,int *b)
{
    int temp = *a;
    *a = *b;
    *b = temp;
}
[解决办法]

引用:
/**
 * 生成1000 0000个[100 0000, 999 9999]之间的不重复的数
 * */
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

unsigned bigrand();
unsigned randint(int l, int u);
void     swap(int *a,int *b);

int main(int argc,char* argv[])
{
    int num[10000000];
    int i;
    FILE *fp = fopen("rand_num_file.txt","a+");
    if(fp == NULL)
    {
        printf("cannot open this file!\n");
        exit(0);
    }
    srand((unsigned)time(NULL));
    
    for(i=0; i<10000000; i++)
        num[i] = i;
    for(i=0; i<1000000; i++)
    {
        swap(&num[i],&num[randint(1000000,10000000-1)]);
        fprintf(fp,"%d\n",num[i]);
    }
    fclose(fp);
    return 0;
}

/* 
 * 生成大随机数(30位)
 **/
unsigned int bigrand()
{
    return rand()*RAND_MAX + rand();
}

/* 
 * 生成[l,m]之间的随机数
 **/
unsigned int randint(int l, int u)
{
    return l + bigrand() % (u-l+1);
}

//交换
void swap(int *a,int *b)
{
    int temp = *a;
    *a = *b;
    *b = temp;
}


骚年,int num[10000000];这个数组就40M字节了,这样的局部变量定义在栈里,栈岂能吃得消,定义成全局的或静态的把

热点排行