Question
// C++ // Lo Shu Magic Square // // I WANNA OUTPUT TO BE RANDOM // BUT HERE MY OUTPUT IS NOT RANDOM #include #include
// C++
// Lo Shu Magic Square
//
// I WANNA OUTPUT TO BE RANDOM
// BUT HERE MY OUTPUT IS NOT RANDOM
#include
#include
#include
using namespace std;
void getRandomNumbers();
void addNumberToArray(int );
bool isMagicSquare();
void populateGrid();
void winningTest();
const int SIZE = 3;
int numbers [SIZE][SIZE] {{0, 0, 0},{0, 0, 0},{0, 0, 0}};
int main()
{
int counter = 0;
do
{
counter++;
cout << counter << endl;
getRandomNumbers();
if (counter == 10000)
break;
winningTest();
}
while (!isMagicSquare());
populateGrid();
cout << "It took " << counter << " tries." << endl;
return 0;
}
void populateGrid()
{
for ( int i = 0; i < SIZE; i++)
{
for (int c = 0; c < SIZE; c++)
{
cout << numbers [i][c] << "";
}
cout << endl;
}
}
bool isMagicSquare()
{
int temSum = numbers [0][0] + numbers [0][1] + numbers [0][2];
// Compare rows; start fromrow 1 because tempSum already holds the sum for row 0
for (int i = 1; i < SIZE; i++)
{
if (numbers [i][0] + numbers [i][1] + numbers [i][2] != temSum)
return false;
}
// Compare colums
for (int i = 0; i << SIZE; i++)
{
if (numbers [0][i] + numbers [1][i] + numbers [2][i] != temSum)
return false;
}
// Compare cross values left to right
if (numbers [0][0] + numbers [1][1] + numbers [2][2] != temSum)
return false;
// Compare cross values right to left
if (numbers [0][2] + numbers [1][1] + numbers [2][0] != temSum)
return false;
return true;
}
void getRandomNumbers()
{
int number = 0;
int usedNumbers[] {0, 0, 0, 0, 0, 0, 0, 0, 0,}; // Array that holds numbers
srand((unsigned) time(NULL));
bool wasNumberUsed = true;
for (int i = 0; i < 9; i++)
{
do
{
wasNumberUsed = true;
number = rand() % 9 + 1; // Get random number 1-9
if (usedNumbers[number - 1] == 0)
{
usedNumbers[number - 1] = number;
wasNumberUsed = false;
}
}
while (wasNumberUsed);
addNumberToArray(number);
}
}
void addNumberToArray(int number)
{
for (int i =0; i < SIZE; i++)
{
for (int c; c < SIZE; c++)
{
if (numbers[i][c] == 0)
{
numbers[i][c] = number;
return;
}
}
}
}
// For testing, this is the winning configuration
void winningTest()
{
numbers[0][0] = 4;
numbers[0][1] = 9;
numbers[0][2] = 2;
numbers[1][0] = 3;
numbers[1][1] = 5;
numbers[1][2] = 7;
numbers[2][0] = 8;
numbers[2][1] = 1;
numbers[2][2] = 6;
}
Step by Step Solution
There are 3 Steps involved in it
Step: 1
Get Instant Access to Expert-Tailored Solutions
See step-by-step solutions with expert insights and AI powered tools for academic success
Step: 2
Step: 3
Ace Your Homework with AI
Get the answers you need in no time with our AI-driven, step-by-step assistance
Get Started