Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.11.2010, 22:11   #1
sigmanen
 
Регистрация: 02.11.2010
Сообщений: 7
По умолчанию Магический квадрат

нужно построить магический квадрат(квадрат в котором суммы членов по вертикали, диагоналям и горизонтали равны) 3*3. У меня уже есть прога, только она очень сложна в понимании и постоянно выводит только один квадрат вот она
Код:
#include <iostream>
 
int main()
{
     int size=3;
     int max_size=size+(size-1);

     int**pMagic_square = new  int*[max_size];
     for (int i=0; i<max_size; i++)
        pMagic_square[i]=new int[max_size];

     int i;
     int j;
     for (i=0; i<max_size; i++)
     for (j=0; j<max_size; j++)
     pMagic_square[i][j]=0;
      int k=1;
     i=(max_size>>1);
     j=0;
     while (i<max_size){
         int i1=i;
         int j1=j;
         int gr=size>>1; //gr-расстояние от границы увеличенного массива
         while (j1<((j+(max_size>>1))+1)){
             pMagic_square[i1][j1]=k;
             if ((i1>(gr)) && (j1<(gr))) //left
                pMagic_square[i1][j1+size]=k;
             if ((i1>(size+gr)-1) && (j1>(gr)))
                pMagic_square[i1-size][j1]=k; //down
             if ((i1<(gr)) && (j1>(gr)))
                pMagic_square[i1+size][j1]=k; //up
             if ((i1>(gr)) && (j1>(size+gr)-1))
                pMagic_square[i1][j1-size]=k; //right
             --i1;
             ++j1;
             ++k;
         }
         ++i;
         ++j;
     }
     std::cout<<std::endl<<"Magic square: "<<std::endl<<std::endl;
     for (i=(size-1)>>1; i<=max_size-(size>>1)-1; i++ ){
         for (j=(size-1)>>1; j<=max_size-(size>>1)-1; j++ )
             std::cout << pMagic_square[i][j] << " ";
         std::cout << std::endl;
     }

     for (int i = 0; i < max_size; ++i)
     std::cin.get();
     return 0;
}
sigmanen вне форума Ответить с цитированием
Старый 12.11.2010, 22:40   #2
Syuf
Форумчанин
 
Аватар для Syuf
 
Регистрация: 02.02.2010
Сообщений: 599
По умолчанию

Логично, ведь он только один (3x3) и существует. Так как сумма всех этих рядов (диаг, верт, ...) постоянна и в квадрате 3x3 равна 15, то пусть посередине х, тогда сумма элементов (1;1) (3;3) как и (2;1) (2;3) как и (3;1) (1;3) равна 15-х и равна 30, т.о. 3*(15-х) = 30 <=> х=5 - число посередине. Все остальные числа определяются однозначно.
"Лишь то читается легко, что написано с трудом; что в час написано, то в час и позабыто."
Syuf вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
магический квадрат Irk-O Помощь студентам 3 11.10.2010 13:00
Магический квадрат Nur_lan_ Фриланс 7 17.01.2010 21:47
Магический квадрат Arman Tokanov Помощь студентам 7 27.10.2009 15:42
Магический квадрат Гаджи Помощь студентам 5 24.10.2009 09:46
Магический квадрат Anarx Паскаль, Turbo Pascal, PascalABC.NET 2 18.12.2008 13:07