注册 登录
编程论坛 C语言论坛

rand()函数怎么去掉出重复值啊?就是每次的随机数都不重复

zsq916 发布于 2020-02-27 11:41, 3630 次点击
我大概知道一点思路,需要一维数组与每次的随机数比较,重复就再随机一次,如果没重复就放入数组内
srand((unsigned)time(NULL));
        c=rand()%42+1;
8 回复
#2
林月儿2020-02-27 11:58
遍历比较
#3
zsq9162020-02-27 12:06
回复 2楼 林月儿
遍历,但是遍历的时候数组里面不是空的吗
#4
zsq9162020-02-27 12:10
回复 2楼 林月儿
遍历的时候如果碰到重复的该如何返回再遍历呢?我感觉我就是卡在这  谢谢您的回复
#5
林月儿2020-02-27 13:23
回复 4楼 zsq916
挨个取待添加到数组的元素,添加前先遍历既存数组,遇到相同的什么都不做
取下一个元素,再从头开始遍历,没有相同元素则加到数组末尾
这里可以多定义一个变量标记数组长度,只有不重复的元素才给这个长度加1,并添加这个元素到数组末尾
也可以在数组最后一个元素的下一个位置设置一个结束的符号用来判断数组是否遍历到末尾
#6
林月儿2020-02-27 13:25
回复 3楼 zsq916
一开始是空的,所以一开始是空遍历,判断次数为0
这么说是为了后面的统一处理,毕竟这个流程结束数组一般不会一直都是空
#7
纯蓝之刃2020-02-27 15:03
程序代码:
#include <stdio.h>

int main()
{
    int a_temp[43]={0};
    int a[43];
    int i,k=0,sum=0;
    int c;

    srand((unsigned)time(NULL));
    do
    {
        sum=0;

        c=rand()%42+1;
        if(a_temp[c]==0)
        {
            a_temp[c]=1;
            a[k++]=c;

            for(i=1;i<=42;i++)
               sum+=a_temp[i];
        }
    }while(sum!=42);

    for(i=0;i<42;i++)
        printf("%d ",a[i]);
}
#8
zsq9162020-02-27 15:34
回复 6楼 林月儿
好的  谢谢您  我明白了
#9
zsq9162020-02-27 15:35
回复 7楼 纯蓝之刃
感谢您的回复 我明白了
1