输出数组中不重复,或者输出特定次数的数组

随机生成1000个1~100之内的整数,统计出不重复的数值和其重复的次数

        Random rand = new Random();
        int[]arr = new int[1000];
        int[]unique = new int[100];
        int[]count = new int[100];
        int k = 0;
        unique[k]=rand.nextInt(100)+1;
        arr[0]=unique[k];
        count[k++]=1;

        for (int i=0,j; i < arr.length; i++) {
            arr[i]=rand.nextInt(100)+1;
            for (j = 0; j <k; j++) {
                if(unique [j]==arr[i]){
                    break;
                }

                }
             if(j==k){
                unique[k]=arr[i];
                count[k++]=1;
             }   else{
                 count[j]++;
             }

            }

随机生成100个,取值1~50之间的整数,任何单值重复不超过两次,输出其数组

         Random rand = new Random();
        final int N=100;
        int[] arr=new int[N];           //重复不超过两次的数组
       
        int ix = 0;                     //uqarr数组中已存入的元素个数
        int[] uqarr = new int[N];       //用于存放不重复值的数组
        int[] uqcnt = new int[N];       //用于计uqarr数组每个元素的重复个数
        for (int i = 0,t,tx; i < arr.length; ) {
            t=rand.nextInt(50)+1;
            tx = -1;
            for (int j = 0; j <ix; j++) {
                if (t==uqarr[j]){  //生成的数t跟uqarr数组中的值uqarr[j]有重复,执行tx=j的下标交换,并跳出for循环,判断下面的重复次数是否超过2次
                    tx = j;
                    break;
                }
            }
            if(tx!=-1&&uqcnt[tx]>=2)continue;   //若生成的数t和uqarr数组有重复且重复的次数超过两次,则再重新生成t,判断是否重复

//有两种情况才会执行到以下步骤:1:随机数t跟所有uqarr[j]不同,for循环,j++遍历整个数组,直到j<ix退出循环,此时tx=-1;2:随机数t找到跟uqarr[j]相同,且重复没超过2次
            arr[i++]=t;    //则把t赋值给arr[i],且i++;
            if (tx==-1){  //若是情况1,则把t值放到uqarr数组中,并计一次数
                uqarr[ix] =t;
                uqcnt[ix++]++;

            }else {
                uqcnt[tx]++; //若是情况2,tx=j的下标已交换,uqcnt计数
            }
        }
        for (int i = 0; i < ix; i++) {
            System.out.println(uqarr[i]+":"+uqcnt[i]);
        }
        int cnt = 0;
        for (int i : arr) {
            System.out.print(i+"\t");
            if (++cnt%14==0){
                System.out.println();
            }
        }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值