• C

WRITE A PROGRAM FOR MAGIC SQUARES

WRITE A PROGRAM THAT GENERATES A MAGIC SQUARE BY THE FOLLOWING METHOD.  AN 5X5, AN 7X7, AND A 3X3 SQUARE.  THE SUM OF EVERY ROW, THE SUM OF EVERY COLUMN AND THE SUM OF THE TWO DIAGONALS MUST BE EQUAL FOR A SQUARE TO BE MAGIC.

tester090797Asked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

SlartiCommented:
This sounds like a high-complexity problem, but there is a very simple solution for the particular case of odd-length magic squares. The following program illustrates this solution. It is written for Borland C++ using only ANSI C commands, so you should have no problems porting it.

------- BEGIN PROGRAM CODE
#include <stdio.h>
#include <mem.h>

#define MAXN 9
typedef int Square[MAXN][MAXN];

int main() {
      Square s={{0}};
      int i,x,y,xnew,ynew,n;

      /* get length of square */
      do {
            printf("Type length of square (odd number between 3 and %d): ",MAXN);
            scanf("%d",&n);
      } while(n%2==0 || n<3 || n>MAXN);

      /* calculate magic square */
      x=0;
      y=n/2;
      for(i=0; i<n*n; i++) {
            /* place current value */
            s[x][y]=i+1;
            /* find next spot */
            xnew = (x+n-1)%n;
            ynew = (y+n-1)%n;
            if(s[xnew][ynew]==0) {
                  x=xnew;
                  y=ynew;
            } else
                  x=(x+1)%n; /* y remains the same */
      }

      /* display result */
      for(y=0; y<n; y++) {
            for(x=0; x<n; x++)
                  printf("%d\t",s[x][y]);
            printf("\n");
      }

      return 0;
}
------- END PROGRAM CODE

That's it. The complexity is proportional to n - you can't do it any faster than that. You can, of course, create larger squares by increasing the value of MAXN.

0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
SlartiCommented:
Sorry, my mistake. The complexity is proportional to n squared. But I still think you won't be able to make it any faster.
0
tester090797Author Commented:
THANK YOU!  I BEING A WEEKEND WARRIOR ON LEARNING HOW TO PROGRAMM IN 'C' FOUND THE SOLUTION TO BE VERY USEFUL.  SOME BOOKS I'VE PURCHASED IS ARE EITHER USEFUL OR TOO "TECH."  I'M USING MICROSOFT VISUAL C/C++ 5.0, THE ONLY THING I HAD TO DO TO GET RID OF AN COMPILE ERROR WAS TO REMOVE #INCLUDE <MEM.H> AND IT DID ITS THING.
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
C

From novice to tech pro — start learning today.

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.