У меня была эта дискуссия с моим другом, который задал ему этот вопрос в интервью.Вопрос идет так.Напишите функцию, которая принимает байтовый массив (двухмерный) в качестве входных данных вместе с целым числом n. Первоначальное предположение состоит в том, что все элементы байтового массива M * N равны нулю, и проблема состоит в том, чтобы заполнить элементы байтового массива n значением1, например, если M = 5 и N = 5, а значение n равно 10, массив байтов должен иметь 10/25 элементов, равных 1, а остальные 15 значений - 0. Заполненные значения должны быть случайными и иметь одну ячейку.в байтовом массиве следует заполнять только один раз.Я был очарован, пытаясь решить это самостоятельно.Я приложил код, который придумал до сих пор.
public Boolean ByteArrayFiller(int a,int b, int n)
{
int count = n;
int iLocalCount = 0;
byte[,] bArray= new byte[a,b];
for (int i = 0; i <a; i++)
for (int j = 1; j <b; j++)
bArray[i, j] = 0;
Random randa= new Random();
int iRandA = randa.Next(a);
int iRandB = randa.Next(b);
while (iLocalCount < n)
{
if (bArray[iRandA, iRandB] == 0)
{
bArray[iRandA, iRandB] = 1;
iLocalCount++;
}
iRandA = randa.Next(a);
iRandB = randa.Next(b);
continue;
}
//do
//{
// //iRandA = randa.Next(a);
// //iRandB = randa.Next(b);
// bArray[iRandA,iRandB]=1;
// iLocalCount++;
//} while (iLocalCount<=count && bArray[iRandA,iRandB]==0);
return true;
}
Код, который я написал, написан на C #, но его легко понять.Он в состоянии справиться с задачей вопроса (я выполнил несколько пробных запусков, и результаты были получены правильно), но я использовал объект Random в C # (эквивалент Math.Rand в Java), чтобы заполнить массив байтов, и я продолжаю думать, еслиRand возвращает одинаковые значения для a и b.Для этого есть все шансы на неопределенный срок.Это цель вопроса?Или решение, которое я нашел для этого вопроса, достаточно хорошее!
Мне любопытно посмотреть, как эксперты здесь решают эту проблему?Я просто ищу новые идеи, чтобы расширить свой кругозор.Любые указатели будут с благодарностью.Спасибо, что нашли время, чтобы прочитать этот пост!