VamsiR
BAN USERtypedef struct Point
{
int x;
int y;
};
int FindClosestConsumer(int array[], int firstIdx, int lastIdx, int numToFind)
{
if (firstIdx > lastIdx) return -1; //invalid inputs
int midIdx = -1;
while (firstIdx <= lastIdx)
{
midIdx = (firstIdx + lastIdx) / 2;
if (numToFind == array[midIdx]) break;
if (numToFind > array[midIdx])
{
firstIdx = midIdx + 1;
}
if (numToFind < array[midIdx])
{
lastIdx = midIdx - 1;
}
}
return array[midIdx];//note: midIdx cannot remain -1 since we are returning -1 error code if firstIdx<lastIdx and control will never reach this point.
}
int main()
{
unsigned int producerCount = 0, consumerCount = 0;
while (producerCount == 0)
{
cout << "Enter number of producers:\n";
cin >> producerCount;
if (producerCount == 0)
{
cout << "Please input producer count greater than 0.\n";
}
}
while (consumerCount == 0)
{
cout << "Enter number of consumers:\n";
cin >> consumerCount;
if (producerCount == 0)
{
cout << "Please input consumer count greater than 0.\n";
}
}
Point *producers = new Point[producerCount];
cout << "Enter " << producerCount << " producers(x y): \n";
for (int i = 0; i < producerCount; i++)
{
cin >> producers[i].x >> producers[i].y;
}
int *consumers = new int[consumerCount];
cout << "Enter " << consumerCount << " consumers(x): \n";
for (int i = 0; i < consumerCount; i++)
{
cin >> consumers[i];
}
for (int i = 0; i < producerCount; i++)
{
int closestConsumer = FindClosestConsumer(consumers, 0, consumerCount - 1, producers[i].x);
if (closestConsumer == -1)
{
cout << "Invalid inputs.\n";
}
else
{
cout << "Closest consumer for producer (" << producers[i].x << ", " << producers[i].y << ") =" << closestConsumer <<"\n";
}
}
delete[] consumers;
delete[] producers;
return 0;
}
int GetMineMatrix(int** array, int size, int** matrix)
{
if (size <= 0) return 0; // invalid array size
for (int i = 0; i < size; i++)
{
for (int j = 0; j < size; j++)
{
if (array[i][j] == 1)
{
if (i - 1 >= 0)
{
if (j - 1 >= 0)
{
matrix[i - 1][j - 1]++;
}
matrix[i - 1][j]++;
if (j + 1 < size)
{
matrix[i - 1][j + 1]++;
}
}
if (j - 1 >= 0)
{
matrix[i][j - 1]++;
}
if (j + 1 < size)
{
matrix[i][j + 1]++;
}
if (i + 1 < size)
{
if (j - 1 >= 0)
{
matrix[i + 1][j - 1]++;
}
matrix[i + 1][j]++;
if (j + 1 < size)
{
matrix[i + 1][j + 1]++;
}
}
}//end if (array[i][j] == 1)
}
}
return 1;//success
}
void main()
{
int size;
int ** array;
cout << "Enter size of matrix:\n";
cin >> size;
array = new int*[size];
for (int i = 0; i < size; i++)
{
array[i] = new int[size];
}
cout << "Enter the matrix values(only 0 or 1 allowed):\n";
for (int i = 0; i < size; i++)
{
for (int j = 0; j < size; j++)
{
cin >> array[i][j];
}
}
//initialize the output matrix
int **matrix = new int*[size];
for (int i = 0; i < size; i++)
{
matrix[i] = new int[size];
}
for (int i = 0; i < size; i++)
{
for (int j = 0; j < size; j++)
{
matrix[i][j] = 0;
}
}
int retval = GetMineMatrix(array, size, matrix);
if (retval == 1)
{
cout << "Mine Matrix =\n";
for (int i = 0; i < size; i++)
{
for (int j = 0; j < size; j++)
{
cout << matrix[i][j] << " ";
}
cout << endl;
}
}
for (int i = 0; i < size; i++)
{
delete[] array[i];
}
delete[] array;
for (int i = 0; i < size; i++)
{
delete [] matrix[i];
}
delete[] matrix;
}
- VamsiR July 19, 2016