Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 15.11.2012
Сообщений: 80

Математическая задача: магические квадраты из квадратов целых

07.04.2025, 20:26. Показов 2714. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
На просторах интернета мною была найдена интересная задачка по математике.
Условие: Дана матрица чисел 3х3, обозначим для простоты буквами латинского алфавита:

a, b, c
d, e, f
g, h, i

Каждое число в матрица не совпадает с 8 другими.
Теперь каждое из них возводим в квадрат.
И суммы всех строк, столбцов и диагоналей, должны быть равными между собой.
Методом "научного тыка" была выявлена следующая закономерность:
если в этих углах разместить ЛЮБУЮ пифагорову тройку:

3, b, 5
d, e, f
0, h, 4

- то тогда при ЛЮБОМ значении "е" - сумма диагоналей ВСЕГДА будет равна и нам останется найти только 4 последних цифры, под буквами b, d, f, и h - соответственно.
Вопросы:
1) в представленном ниже коде я задал пифагорову тройку в ручном режиме, как сделать автоматический перебор пифагоровых троек после прохождения всего цикла?
2) можно ли каким-либо образом оптимизировать код, кажется условия слишком длинные?)

P.S. цикл до 100 - ради примера, так он должен быть гораздо больше, ибо где-то читал, что перебрали все варианты до 10000 включительно


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <iostream>
#include <cmath>
using namespace std;
 
int main()
{
    long long int a=3, b, c=5, d, e, f, g=0, h, i=4;
    long long int a1=9, b1, c1=25, d1, e1, f1, g1=0, h1, i1=16;
    long long int g1_1, g2, g3, v1, v2, v3, d1_1, d2;
    for (b=1; b < 101; b++) {
        d = 1;
        for (d; d < 101; d++) {
            e = 1;
            for (e; e < 101; e++) {
                f = 1;
                for (f; f < 101; f++) {
                    h = 1;
                    for (h; h < 101; h++) {
                        if (a != b && a != c && a != d && a != e && a != f && a != g && a != h && a != i && b != c && b != d && b != e && b != f && b != g && b != h && b != i && c != d && c != e && c != f && c != g && c != h && c != i && d != e && d != f && d != g && d != h && d != i && e != f && e != g && e != h && e != i && f != g && f != h && f != i && g != h && g != i && h != i) {
                            b1 = pow(b, 2);
                            d1 = pow(d, 2);
                            e1 = pow(e, 2);
                            f1 = pow(f, 2);
                            h1 = pow(h, 2);
                            g1_1 = a1 + b1 + c1;
                            g2 = d1 + e1 + f1;
                            g3 = g1 + h1 + i1;
                            v1 = a1 + d1 + g1;
                            v2 = b1 + e1 + h1;
                            v3 = c1 + f1 + i1;
                            d1_1 = a1 + e1 + i1;
                            d2 = c1 + e1 + g1;
                            if (d1_1 == g2 && d1_1 == g3 && d1_1 == v1 && d1_1 == v2 && d1_1 == v3 && d1_1 == d1_1 && d1_1 == d2) {
                                cout << a << " " << b << " " << c << "/n" << d << " " << e << " " << f << " " << "/n" << g << " " << h << " " << i << " Answer";
                            }
                        }
                    }
                }
            }
        }
    }
    
}
*Если кто-то не уснул, то вот ссылка на условие задачи:
 Комментарий модератора 
deleted
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.04.2025, 20:26
Ответы с готовыми решениями:

"Магические" квадраты
Задача Magic. Существует огромное количество разных видов &quot;магических&quot; квадратов. Одним из них...

Магические кристаллы
Всем привет, попалась вот такая задача и я не знаю что с ней делать: Есть многоугольник, заданный...

Гарри Поттер и магические шахматы [C, B’] - массивыыыыыы
Гарри, Рон и Гермиона попали на шахматное поле. Пустое. С загадочными числами. Гермиона, мысленно...

9
 Аватар для Pphantom
2239 / 1500 / 688
Регистрация: 17.03.2022
Сообщений: 4,766
07.04.2025, 20:41
Цитата Сообщение от selo4404 Посмотреть сообщение
- то тогда при ЛЮБОМ значении "е" - сумма диагоналей ВСЕГДА будет равна и нам останется найти только 4 последних цифры, под буквами b, d, f, и h - соответственно.
Проще говоря, из пяти неизвестных при наличии уравнения связи (как минимум одного) остается только четыре. А в чем новизна результата?
0
0 / 0 / 0
Регистрация: 15.11.2012
Сообщений: 80
07.04.2025, 20:56  [ТС]
Цитата Сообщение от Pphantom Посмотреть сообщение
Проще говоря, из пяти неизвестных при наличии уравнения связи (как минимум одного) остается только четыре. А в чем новизна результата?
Могу ошибаться, но такого подхода к решению задачи, еще не было, потому, возможно, только для меня, это и есть новизна: когда методом проб, нашли 5 переменных (и тут, важное уточнение, представлена только 1 из вариантов набора чисел)
0
2890 / 1924 / 208
Регистрация: 05.06.2011
Сообщений: 5,613
08.04.2025, 07:13
Ну, перебор пифагоровых троек можно устроить по третьему числу, самому большому. формулы https://www.cyberforum.ru/cgi-bin/latex.cgi?x=m^2-n^2,y=2mn,z=m^2+n^2. Берём число, пытаемся его представить в виде суммы квадратов, если получилось, то это z, вычисляем все соответствующие x, y, добавляем пары 0,z и z,0 расставляем по углам и пробуем достроить квадрат.
Есть даже теорема, что все простые делители числа z должны быть вида https://www.cyberforum.ru/cgi-bin/latex.cgi?4k+1, так что можно разлагать на простые делители, проверять и только если все такие, пытаться разложить. Возможно, надо теорию изучать, все разложения получаются из разложений простых делителей. Быстрее ли это, чем тупой перебор для каждого четвёртого числа, не знаю.
Опять же, перебор квадратов лучше, имхо, не прямым перебором, а — расставили по углам, ставим в центр квадрат и вычисляем оставшиеся по формулам, проверяем, квадраты ли.
1
Объявлятель переменных
 Аватар для SpBerkut
1224 / 410 / 321
Регистрация: 24.09.2011
Сообщений: 1,279
08.04.2025, 07:23
selo4404, я правильно понимаю, что Вам нужно соорудить магический квадрат, который состоит из различных квадратов натуральных чисел? Решили уделать старика Эйлера?
Вложения
Тип файла: pdf fourthyearproject.pdf (1.08 Мб, 35 просмотров)
2
631 / 526 / 104
Регистрация: 05.08.2022
Сообщений: 2,810
08.04.2025, 07:49
А 0 (ноль) - допустимое число для таких квадратов?
0
2890 / 1924 / 208
Регистрация: 05.06.2011
Сообщений: 5,613
08.04.2025, 08:50
Ну, ТС, похоже, считает, что да. Но только один раз!
Цитата Сообщение от SpBerkut Посмотреть сообщение
Решили уделать старика Эйлера?
Да там целая толпа этих стариков!
0
0 / 0 / 0
Регистрация: 15.11.2012
Сообщений: 80
08.04.2025, 16:24  [ТС]
Цитата Сообщение от SpBerkut Посмотреть сообщение
selo4404, я правильно понимаю, что Вам нужно соорудить магический квадрат, который состоит из различных квадратов натуральных чисел? Решили уделать старика Эйлера?
видел варианты решений с дробями и даже мнимыми числами, начал с натуральных, т.к. с ними проще работать

Добавлено через 8 минут
Цитата Сообщение от iifat Посмотреть сообщение
Ну, перебор пифагоровых троек можно устроить по третьему числу, самому большому. формулы https://www.cyberforum.ru/cgi-bin/latex.cgi?x=m^2-n^2,y=2mn,z=m^2+n^2. Берём число, пытаемся его представить в виде суммы квадратов, если получилось, то это z, вычисляем все соответствующие x, y, добавляем пары 0,z и z,0 расставляем по углам и пробуем достроить квадрат.
Есть даже теорема, что все простые делители числа z должны быть вида https://www.cyberforum.ru/cgi-bin/latex.cgi?4k+1, так что можно разлагать на простые делители, проверять и только если все такие, пытаться разложить. Возможно, надо теорию изучать, все разложения получаются из разложений простых делителей. Быстрее ли это, чем тупой перебор для каждого четвёртого числа, не знаю.
Опять же, перебор квадратов лучше, имхо, не прямым перебором, а — расставили по углам, ставим в центр квадрат и вычисляем оставшиеся по формулам, проверяем, квадраты ли.
Я нашел на просторах интернета варианты перебора и поиска Пифагоровых троек, в С++. Вопрос в другом:
задали изначально: 3, 4, 5
Цикл прошелся от начала до конца и теперь вместо 3, 4, 5, нам надо вставить, допустим, 6, 8, 10 на те же самые позиции и запустить цикл с самого начала, вот тут то я и не понимаю, как это можно реализовать.

Вот пример перебора троек:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <iostream>
#include <cmath>
 
int main()
{
    setlocale(LC_ALL, "Russian");
 
    int a1 = 0;
    int a2 = 0;
 
    std::cout << "Введите два числа: ";
    std::cin >> a1 >> a2;
 
    if (a1 > a2)
    {
        int tmp = a2;
        a2 = a1;
        a1 = tmp;
    }
 
    std::cout << "Пифагоровы тройки чисел от "
        << a1 << " до " << a2 << " включительно:" << std::endl;
    for (int i = a1; i <= a2; i++)
    {
        for (int j = a1; j <= a2; j++)
        {
            for (int k = a1; k <= a2; k++)
            {
                if (i * i + j * j == k * k)
                    std::cout << "{ " << i << ";" << j << ";" << k << "}" << std::endl;
            }
        }
    }
 
    return 0;
}
А как встроить конструкцию в первую программу, не пойму, как мне кажется, надо идти через отдельную функцию, а там я не силён
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38157 / 21093 / 4305
Регистрация: 12.02.2012
Сообщений: 34,675
Записей в блоге: 14
08.04.2025, 17:54
selo4404, когда я вижу использование pow в целочисленных задачах, моя рука тянется к пистолету меня продирает до пяток!

Ведь по-человечески написать

C++
1
b1=b*b;
это ведь короче, чем по-школярски:

C++
1
b1=pow(b,2);

про то, что pow возвращает не целый результат, я уже и не говорю!..
0
2890 / 1924 / 208
Регистрация: 05.06.2011
Сообщений: 5,613
09.04.2025, 06:20
Цитата Сообщение от selo4404 Посмотреть сообщение
Вот пример перебора троек
Цель беседы как-то перестал понимать. Надыбать в интернете решения простейших задач тупейшим изо всех возможных перебором и слепить из них нечто невообразимое? Ну, правильной дорогой идёте, удачи. Попробовать решить открытую математическую проблему? Вы прочитали ссылку, что сообщил SpBerkut? Там центральное число не менее https://www.cyberforum.ru/cgi-bin/latex.cgi?25\times10^{24}, обратили внимание? Чему-то научиться? Ну дык надо проштудировать математику, составить алгоритм и потом уж только думать Цэ++ или любом другом языке.
3
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
09.04.2025, 06:20
Помогаю со студенческими работами здесь

Дана целая квадратная матрица. Определить, является ли она магическим квадратом
Дана целая квадратная матрица. Определить, является ли она магическим квадратом, т.е. такой, в...

Определить, является ли заданная целочисленная матрица магическим квадратом
Помогите решить задачу на С++. Двумерные массивы. Вариант 1. Определить, является ли заданная...

Определить, является ли заданная целочисленная матрица магическим квадратом
Определить, является ли заданная целочисленная матрица А N-го порядка магическим квадратом, т.е....

Определить, является ли заданная целочисленная матрица магическим квадратом
Написать программу, которая определяет, является ли заданная целочисленная матрица магическим...

Шифровать методом Магического квадрата (размер квадрата 9х9) С++
Шифровать методом Магического квадрата (размер квадрата 9х9) С++ Дана таблица 9х9. Надо...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
PowerShell Snippets
iNNOKENTIY21 11.11.2025
Модуль PowerShell 5. 1+ : Snippets. psm1 У меня модуль расположен в пользовательской папке модулей, по умолчанию: \Documents\WindowsPowerShell\Modules\Snippets\ А в самом низу файла-профиля. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru