Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
4 / 5 / 2
Регистрация: 17.09.2021
Сообщений: 402

Магические квадраты

18.10.2022, 02:26. Показов 809. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброе утро помогите пожалуйста написать шифра магические квадраты (5*5) зашифровать свои «ФамилияИмяОтчество»
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.10.2022, 02:26
Ответы с готовыми решениями:

Белые квадраты
Здраствуйте! Произошёл такой конфуз В Visual Studio 2017 есть форма: Но при запуске она выглядит вот так: С другими Формами...

Вписанные квадраты
Подскажите как побороть эту задачку, нужно нарисовать фигуры как на картинке, у меня получилось только нарисовать в ручную первый ромб: ...

магические квадраты
Здравствуйте.Вот выдали мне тестовую работу на дом.Всё что смог решил осталось 4 задачки.Кто знает напишите код плиз!Заранее спс! ...

5
 Аватар для iLinks
800 / 458 / 237
Регистрация: 03.01.2017
Сообщений: 1,339
18.10.2022, 12:51
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
private static string Encrypt(int[,] magicSquare, string text)
{
    string encrypt = string.Empty;
    text = text.Length < magicSquare.Length ? text + string.Join("", Enumerable.Range(1, magicSquare.Length - text.Length).Select(r => " ")) : text;
    for (int i = 0; i < magicSquare.GetLength(0); i++)
    {
        for (int j = 0; j < magicSquare.GetLength(1); j++)
        {
            encrypt += text[magicSquare[i, j] - 1];
        }
    }
    return encrypt;
}
private static int[,] GetMagicSquare(int r, int c)
{
    Random random = new Random();
    var range = Enumerable.Range(1, r * c).Select(n => n).ToList();
    int[,] ms = new int[r, c];
    for (int i = 0; i < ms.GetLength(0); i++)
    {
        for (int j = 0; j < ms.GetLength(1); j++)
        {
            ms[i, j] = range[random.Next(0, range.Count())];
            range.Remove(ms[i, j]);
        }
    }
    return ms;
}
static void Main(string[] args)
{
    var text = "ФамилияИмяОтчество";
    int[,] magicSquare = GetMagicSquare(5, 5);
    var encrypt = Encrypt(magicSquare, text);
    Console.WriteLine(encrypt);            
    Console.ReadLine();
}
0
 Аватар для ashsvis
923 / 503 / 202
Регистрация: 08.10.2018
Сообщений: 1,553
Записей в блоге: 11
18.10.2022, 15:54
Цитата Сообщение от iLinks Посмотреть сообщение
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
private static int[,] GetMagicSquare(int r, int c)
{
    Random random = new Random();
    var range = Enumerable.Range(1, r * c).Select(n => n).ToList();
    int[,] ms = new int[r, c];
    for (int i = 0; i < ms.GetLength(0); i++)
    {
        for (int j = 0; j < ms.GetLength(1); j++)
        {
            ms[i, j] = range[random.Next(0, range.Count())];
            range.Remove(ms[i, j]);
        }
    }
    return ms;
}
В чём "магичность" квадрата, выдаваемого этим методом?
0
 Аватар для iLinks
800 / 458 / 237
Регистрация: 03.01.2017
Сообщений: 1,339
18.10.2022, 16:00
ashsvis, блин, да, забыл про это.
Dmitry0-01, этот метод просто рандомно заполняет массив, "магичности" там нет. Нужно чтобы сумма сток/столбцов/диагоналей была одинакова.
0
 Аватар для ashsvis
923 / 503 / 202
Регистрация: 08.10.2018
Сообщений: 1,553
Записей в блоге: 11
20.10.2022, 11:15
Лучший ответ Сообщение было отмечено Dmitry0-01 как решение

Решение

Dmitry0-01, iLinks, подправил метод для генерации магического квадрата
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
private static string Encrypt(int[,] magicSquare, string text)
{
    string encrypt = string.Empty;
    text = text.Length < magicSquare.Length ? text + string.Join("", Enumerable.Range(1, magicSquare.Length - text.Length).Select(r => " ")) : text;
    for (int i = 0; i < magicSquare.GetLength(0); i++)
    {
        for (int j = 0; j < magicSquare.GetLength(1); j++)
        {
            encrypt += text[magicSquare[i, j] - 1];
        }
    }
    return encrypt;
}
private static int[,] GetMagicSquare(int side)
{
    // смещение от середины стороны
    var offset = (side - 1) / 2;
    // список точек, содержащий индексы квадратной матрицы
    var list = new List<PointF>();
    // заполняем список, где центральный элемент квадрата будет иметь индекс 0,0
    for (var i = -offset; i <= offset; i++)
        for (var j = -offset; j <= offset; j++)
            list.Add(new PointF(j, i));
    // получаем массив точек с индексами
    var pts = list.ToArray();
    // заводим матрицу для вычисления поворота индексов 
    var m = new Matrix();
    // матрица смещается для придания верхнему левому элементу индекса 0,0
    m.Translate(offset, offset);
    // при повороте на 45° смещение учитывается смещение на корень из двух
    var sc = (float)Math.Sqrt(2f);
    // увеличиваем смещение
    m.Scale(sc, sc);
    // поворачиваем на 45°
    m.Rotate(45f);
    // выполняем трансформацию индексов
    m.TransformPoints(pts);
    // при трансформации возникают погрешности, которые устраняем округлением до целого
    for (var i = 0; i < pts.Length; i++)
    {
        pts[i].X = (float)Math.Round(pts[i].X, 0);
        pts[i].Y = (float)Math.Round(pts[i].Y, 0);
    }
    // создаем результирующу матрицу
    int[,] ms = new int[side, side];
    var n = 1; // начальный индекс
    foreach (var pt in pts)
    {
        if (pt.X >= 0 && pt.X < side && pt.Y >= 0 && pt.Y < side)
            ms[(int)pt.X, (int)pt.Y] = n;           // индексы в пределах матрицы
        else if (pt.X < 0)
            ms[(int)pt.X + side, (int)pt.Y] = n;    // индекс за левой гранью
        else if (pt.Y < 0)
            ms[(int)pt.X, (int)pt.Y + side] = n;    // индекс за верхней гранью
        else if (pt.X >= side)
            ms[(int)pt.X - side, (int)pt.Y] = n;    // индекс за правой гранью
        else if (pt.Y >= side)
            ms[(int)pt.X, (int)pt.Y - side] = n;    // индекс за нижней гранью
        n = n + 1; // приращение индекса 
    }
    return ms;
}
static void Main(string[] args)
{
    var text = "ФамилияИмяОтчество";
    int[,] magicSquare = GetMagicSquare(5);
    var encrypt = Encrypt(magicSquare, text);
    Console.WriteLine(encrypt);            
    Console.ReadLine();
}
1
4 / 5 / 2
Регистрация: 17.09.2021
Сообщений: 402
20.10.2022, 13:11  [ТС]
ashsvis, Если есть возможность помогите пожалуйста с Шифр Хилла
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
20.10.2022, 13:11
Помогаю со студенческими работами здесь

Вывести на экран эти квадраты, выделить другим цветом квадраты с максимальной и минимальной площадью
Помогите с заданием : В файле задано квадраты координатами диагоналей. Вывести на экран эти квадраты, выделить другим цветом квадраты с...

Магические числа GZipStream
Здравствуйте, Проблема в следующем. Я пишу архиватор, который выполняет работу в многопоточном режиме по типу конвейера. Я считываю блок...

Квадраты в матрице
В матрице, состоящей из нулей и единиц найти квадрат наибольшего размера, состоящий целиком из нулей.

магические квадраты
&quot;магический квадрат&quot; обладает тем свойством, что Все строки и Колонка суммы и две диагональные суммы всегда такой же являются . ...

Магические квадраты
Генерация магических квадратов (4*4) и поблочное шифрование с ключом.Помогите пожалуйста


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
1С: Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит значение перечислений. / / Событие "НачалоВыбора" реквизита на форме. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru