随机修改二维数组元素
2d array element modification randomly
我有2d数组(10x12),其中有0和1。我想计算每个数组中的1,这里有两种情况:(1)如果一个数组有三个以上的1,比如说k个,那么生成k-3个随机变量,如果该随机变量对应于1,那么用0替换这个多个1。(2) 如果一个数组少于三个1,比如说q个,那么生成3-q个随机变量,如果该随机变量对应于0,则用1替换多个0。到目前为止,我有以下代码。我需要一些建议,我不能很好地构建代码。
int y[10];
int r[10];
for(int i=0; i < 10; i++)
{
for(int j=0; j < 12; j++)
{
y[i] += Array[i][j];
}
if(y[i] > 3)
{
f = y[i] - 3;
if(Array[i][r[f]] ==1)
Array[i][r[f]] = 0;
}
if(y[i] < 3)
{
f = 3 - y[i];
if(Array[i][r[f]] ==0)
Array[i][r[f]] = 1;
}
}
感谢
这应该会让你开始:
#define ROW (10)
#define COL (12)
#define NUM_ONES_THRESHOLD (3)
int numOnes = 0, elementsToModify, randRow, randCol;
bool toggleUp;
/* Count 1s */
for(int row = 0; row < ROW; row++)
{
for(int col = 0; col < COL; col++)
numOnes += Array[row][col];
}
/* Determine How Many Elements To Modify */
if(numOnes > NUM_ONES_THRESHOLD)
{
elementsToModify = numOnes - NUM_ONES_THRESHOLD;
toggleUp = false;
}
else
{
elementsToModify = NUM_ONES_THRESHOLD - numOnes;
toggleUp = true;
}
/* Modify Table */
while(elementsToModify > 0)
{
randRow = rand() % ROW;
randCol = rand() % COL;
if((Array[randRow][randCol] == 1) && !toggleUp)
{
Array[randRow][randCol] = 0;
elementsToModify --;
}
if((Array[randRow][randCol] == 0) && toggleUp)
{
Array[randRow][randCol] = 1;
elementsToModify --;
}
}
它可以进行优化。我把它留给你练习。。。
相关文章:
- 将二维数组的所有元素插入到一维数组中
- 元素在二维数组 c++ 中的出现次数
- 在二维数组中查找第二大元素
- 在给定元素在螺旋上的位置的情况下,在二维数组中查找元素
- 如何为映射和priority_queue编写比较器,其中元素是二维数组
- 如何将 50 行和 50 列的二维数组编码为一个为元素随机分配星号的函数?
- 如何删除二维数组中的元素
- 我无法将二维数组的两个元素的差异分配给C++中其他数组的元素?
- 在 c 和 c++ 中,二维数组的元素是什么类型?
- 如何在默认和二维数组中找到顺序扩大元素的位置
- C++ 中二维数组中未知数量的元素
- 是一个二维数组的名称,它在C++中的第一个元素的地址
- 从二维数组中给定的索引中求对角线元素的和
- 二维数组的最小/最大元素
- 随机修改二维数组元素
- 二维数组:二维数组的子平方的元素之和
- 将二维数组元素复制到另一个具有其他大小的二维数组中
- 如何将元素添加到二维数组/矩阵的随机位置
- C++:用满足特定要求的二维数组的元素制作数组
- 获取动态二维数组元素的行/列