首页 新闻 会员 周边 捐助

一个关于数组的问题

0
悬赏园豆:10 [已解决问题] 解决于 2013-04-27 16:06

1、一个整形数组,假如长度为len

2、一个随机产生1和0这两个整数的随机算法,这个方法为

int R()

{

//省略实现,不需要关心如何实现此方法

}

3、现在需要在这个整数数组中随机分配k个1(k<len),其它都分配为0

 

这个怎样实现?

啊風的主页 啊風 | 初学一级 | 园豆:112
提问于:2013-04-24 11:22
< >
分享
最佳答案
0

int[] arr=newint[len];

for(int i=0;i<10;i++){

arr[i]=R();

}

收获园豆:5
Wolfe Yu | 菜鸟二级 |园豆:434 | 2013-04-24 12:07

要保证数组里面有k个1,len-k个0

你这个保证不了

啊風 | 园豆:112 (初学一级) | 2013-04-24 12:25

需要预先定义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;
}
}
}

Wolfe Yu | 园豆:434 (菜鸟二级) | 2013-04-25 09:58
其他回答(5)
0

没其他要求的话还是比较简单的,假设整个数组都是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();
}}
收获园豆:5
today4king | 园豆:3499 (老鸟四级) | 2013-04-24 13:35
0

你这个用不到你的R()方法。你这个应该是在len里面随机选k个位置,选中的是1,没选中的是0。

gw2010 | 园豆:1487 (小虾三级) | 2013-04-24 14:25
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);
   //注:把省略的不齐
峰和日丽 | 园豆:110 (初学一级) | 2013-04-24 15:17
0
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++;
}
水牛刀刀 | 园豆:6350 (大侠五级) | 2013-04-24 16:00
0

直接产生K个0~N的不重复的随机数

K是1的个数,N是数组长度

把这K个置1

同样的随机效果,干嘛用那个算法

goooogs | 园豆:64 (初学一级) | 2013-04-24 19:58

如果需要,可以在上面的基础上通过你的R给数组赋值,同时计数,直到K个1,既随机位置又随机值

不知道你什么需求,

支持(0) 反对(0) goooogs | 园豆:64 (初学一级) | 2013-04-24 20:04
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册