不重复的随机数,在一定范围内出现

4 篇文章 0 订阅

方法一:

使用一个数组,控制count值,不重复则存入:

int i,j;int flag=0,rc=0,count=0,r;
	
	srand((unsigned)time(NULL));
	
	int* a=new int[8];
	int (*g)[3]=new int[3][3];
	for(i=1;i<=8;i++)//数列a 
	{
		a[i-1]=i;
		//cout<<"检a"<<i-1<<" "<<i;
	}
 
	int* b=new int[8];
 
	while(count<8){//随机b 
		r=rand()%8+1;
		flag=0;
		for(j=0;j<8;j++){
			if(b[j]==r){//已存在 
				flag=1;
			}
		}
		if(flag!=1){
			b[count]=r;
			count++;	
		}
	} 

方法2:

使用两个数组,其中一个数组可以置为全1也可以置为范围内所有值:

      int[] num=new int[21];
        int[] a=new int[21];
        int i=0;
        int j=0;
        int f=0;
for(i=0;i<20;i++){//1-20
    a[i]=i+1;
}

for(i=0;i<20;i++){
    num[i]=getrand();//获取一个随机数
    f=0;
    for(j=0;j<20;j++){
        if(a[j]==num[i]&&a[j]!=0){
            a[j]=0;//已存在置0
        }
         else if(j==num[i]-1&&a[j]==0){//检测a[j]的0
            num[i]=0;

        }
    }
}
        for(i=0;i<20;i++){
            System.out.println(num[i]+" "+a[i]);
        }
        for(i=0;i<20;i++){

                for (j = 0; j < 20; j++){
                    if(num[i]==0) {
                    if(a[j]!=0){
                        num[i]=a[j];//把未存入的值放入
                        a[j]=0;//此处注意置0,不然会被再次处理
                    }
                }
            }
        }
        for(i=0;i<20;i++){
            System.out.println(num[i]);
        }

方法3:

使用集合,转载自这里

public static void main(String[] args) {
		// TODO Auto-generated method stub
		 //1,有Random类创建随机数对象
        Random wsq = new Random();                                  

        //2,需要存储10个随机数,而且不能重复,所以我们用HashSet集合
        HashSet<Integer> yy = new HashSet<>();

        //3,如果HashSetsize是小于10就可以不断的存储,如果大于等于10就停止储存
        while(yy.size()<10){
            //4,通过Random类中的nextInt(n)方法获取1到20之间的随机数,并将这些随机数存储在HashSet集合中
            yy.add(wsq.nextInt(20)+1);
        }
        System.out.println("随机数如下:");
        for (Integer integer : yy) {
            System.out.println(integer);
        } 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qiu___nan

谢谢!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值