int[] arr=newint[len];
for(int i=0;i<10;i++){
arr[i]=R();
}
要保证数组里面有k个1,len-k个0
你这个保证不了
需要预先定义len,K,R()。
int count_1 = 0;
int count_0 = 0;
int[] arr = new int[len];
for (int i = 0; i < 10; i++) {
int value = R();
if (count_1 < k && count_0 < len - k) {
if (value == 1)
count_1++;
if (value == 0)
count_0++;
arr[i] = value;
} else {
if (count_1 == k) {
arr[i] = 0;
} else {
arr[i] = 1;
}
}
}
没其他要求的话还是比较简单的,假设整个数组都是0组成:
int[] arr=new int[len]; int countOfOne=0; while(countOfOne<k){ for(int i=0;i<len;i++){ var r=R(); if(countOfOne==k) return;//成功了 if(r==1) { countOfOne++; } if(arr[i]==0) arr[i]=R(); }}
你这个用不到你的R()方法。你这个应该是在len里面随机选k个位置,选中的是1,没选中的是0。
int []
int [] arr=new [len]; int count=0; for(int i=0;i<arr.length;i++) { var r=R(0-1); //R是简写的 if (arr[i]==0) { count++; } } Conlsewrite("0的总数为"+count); //注:把省略的不齐
int len = 10, k = 4; var arr = new int[len]; int counter = 0; var random = new Random(); while (counter < k) { int index; do { index = random.Next(len); } while (arr[index] != 0); arr[index] = 1; counter++; }
直接产生K个0~N的不重复的随机数
K是1的个数,N是数组长度
把这K个置1
同样的随机效果,干嘛用那个算法
如果需要,可以在上面的基础上通过你的R给数组赋值,同时计数,直到K个1,既随机位置又随机值
不知道你什么需求,