Magic Square Program (C++)

前端 未结 5 447
没有蜡笔的小新
没有蜡笔的小新 2020-12-17 01:12

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

相关标签:
5条回答
  • 2020-12-17 01:25

    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;
      }
    }
    
    0 讨论(0)
  • 2020-12-17 01:32
    #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;
      }
    
    0 讨论(0)
  • 2020-12-17 01:39

    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.

    0 讨论(0)
  • 2020-12-17 01:48

    you cant take the number n from the user ,because you have to define the size of the array with constant

    0 讨论(0)
  • 2020-12-17 01:50

    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

    0 讨论(0)
提交回复
热议问题