For those unfamiliar with the classic magic square algorithm: A magic square is a two dimensional array (n x n) which contains a numerical value between the values 1 and n^2
you must initialize contain all elements to zeros:
memset(MagicSquare, 0, sizeof(MagicSquare));
Othewise it show garbage value.
N.B: memset function include in cstring header file.
Your corrected code:
#include<iostream>
#include<iomanip>
#include <cstring>
using namespace std;
int main()
{
int n;
// cout<< "Please enter an odd integer: ";
cin>>n;
int MagicSquare[n][n];
int newRow,
newCol;
memset(MagicSquare, 0, sizeof(MagicSquare));
// Set the indices for the middle of the bottom i
int i =0 ;
int j= n / 2;
// Fill each element of the array using the magic array
for ( int value = 1; value <= n*n; value++ )
{
MagicSquare[i][j] = value;
// Find the next cell, wrapping around if necessary.
newRow = (i + 1) % n;
newCol = (j + 1) % n;
// If the cell is empty, remember those indices for the
// next assignment.
if ( MagicSquare[newRow][newCol] == 0 )
{
i = newRow;
j = newCol;
}
else
{
// The cell was full. Use the cell above the previous one.
i = (i - 1 + n) % n;
}
}
for(int x=0; x<n; x++)
{
for(int y=0; y<n; y++)
cout << MagicSquare[x][y]<<" ";
cout << endl;
}
}
#include<iostream.h>
#include<iomanip.h>
int main()
{
int arr[25][25]={0};
cout<<"Enter size(odd):";
int size;
cin>>size;
int i=0,j=(size-1)/2,n=1;
arr[i][j]=n;
while(n<=size*size){
i--;
j--;
if(i<0&&j>=0){
i=size-1;
arr[i][j]=n;
n++;
}else if(j<0&&i>=0){
j=size-1;
arr[i][j]=n;
n++;
}else if(i<0&&j<0){
i=i+2;
j=j+1;
arr[i][j]=n;
n++;
}else if(arr[i][j]!=0){
i=i+2;
j=j+1;
arr[i][j]=n;
n++;
}else{
arr[i][j]=n;
n++;
}
}
for(i=0,i<ize;i++){
for(j=0,j<size;j++){
cout<<setw(3)<<arr[i][j];
}
cout<<endl;
}
return 0;
}
You forgot to initialize your MagicSquare
to contain all zeros:
for(int i = 0; i < n; i++) {
for(int j = 0; j < n; j++) {
MagicSquare[i][j] = 0;
}
}
Thus this check will almost always fail:
if ( MagicSquare[newRow][newCol] == 0 ) {
i = newRow;
j = newCol;
}
As C/++ doesn't initialize them to 0 for you.
you cant take the number n from the user ,because you have to define the size of the array with constant
You should create the dynamic array in order to listen dimension from keyboard, but don't forget to delete arrays when you don't need it