powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Магический квадрат
14 сообщений из 14, страница 1 из 1
Магический квадрат
    #33377323
Leeroy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброе время суток........
объясните plz задачу:
Задано целое число n (2<=n<=10) Построить n различных магических квадратов размером 4*4 , составленных из костей одного комплекта домино. Кости располагать только горизонтально.....

(от решения не откажусь)
...
Рейтинг: 0 / 0
Магический квадрат
    #33377377
Фотография Va1entin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Если из ОДНОГО комплекта,
то больше чем на n=3, боюсь, никак не хватит.
(Простая оценка сверху).

2. Если при построении каждого следующего
используются только 8 костей одного комплекта:

Самый примитивный алгоритм - метод полного перебора.
Всего 28 костей, каждую можно расположить
в двух направлениях (как (1:2) и (2:1)), исключая дубли.
Для построения одного квадрата (8 костей) потребуется,
(простая оценка сверху) как минимум:

(28 * 2) * (27 * 2) * (26 * 2) * (25 * 2) ... (21 * 2) операций.
...
Рейтинг: 0 / 0
Магический квадрат
    #33377381
Фотография Va1entin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sorry,
(как минимум) -> (не более)
...
Рейтинг: 0 / 0
Магический квадрат
    #33378705
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Leeroy

Уточните определение магического квадрата. Их бывает несколько.
...
Рейтинг: 0 / 0
Магический квадрат
    #33379740
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
суммы во все стороны одинаковы :)
а какие ещё есть?
------------------
- А как в Интеpнете pаботать? - Сначала нужно узнать, что вам нужно rtfm
...
Рейтинг: 0 / 0
Магический квадрат
    #33379878
Lightest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maXmoсуммы во все стороны одинаковы :)
а какие ещё есть?

Кажись еще произведения бывают. Может еще что есть. Придумать много что можно.
...
Рейтинг: 0 / 0
Магический квадрат
    #33388687
Leeroy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Магический квадрат - это матрица , где суммы по всем вертикалям,всем горизонталям и по главным диагоналям одинаковые.

Помогите плз. Хотя бы приведите плз примеры для каждого N по N штук...........
...
Рейтинг: 0 / 0
Магический квадрат
    #33389576
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ух, неугомонный..

На чем программируешь-то?
...
Рейтинг: 0 / 0
Магический квадрат
    #33392801
Leeroy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Delphi
...
Рейтинг: 0 / 0
Магический квадрат
    #33392834
Leeroy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ребята , помогите ........ последняя надежда на вас........
...
Рейтинг: 0 / 0
Магический квадрат
    #33392948
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Была у меня похожая задачка. Только написана
на C++. И вместо домино - игральные кости.
Могу поискать, если время терпит.
...
Рейтинг: 0 / 0
Магический квадрат
    #33393662
Leeroy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
автор
Была у меня похожая задачка. Только написана
на C++. И вместо домино - игральные кости.
Могу поискать, если время терпит.


Да плз !!!........... В коде С я разберуь............
...
Рейтинг: 0 / 0
Магический квадрат
    #33394241
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот один вариант...
Код: plaintext
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.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
#define SIZE  160              /* Consider a memory for increasing the size. */

#include "stdio.h"
#include "stdlib.h"
#include "conio.h"

int m[SIZE][SIZE];

void odd_num(int n);
void even_num(int n);
void output(int n);
void _swap(int i1, int j1, int i2, int j2);

main()
{
    int i,j,n;
    char *s="           ";

    printf("\n***************************************************************************");
    printf("\n*                     <  < <   MAGIC  SQUARE   > >  >                     *");
    printf("\n*            by;  Kwon Young Shin(brainstm@chollian.net)                  *");
    printf("\n***************************************************************************");

    while( 1 ) {
        printf("\n\n\n:-) Input the number(3-%d): ",SIZE);
        gets(s);
        n=atoi(s);
            if(n <  3  || n > SIZE) break;
        if(n% 2 ) odd_num(n);
        else even_num(n);
        output(n);
    }

    printf("\n\n* .. Quit .. .  [[ <   MAGIC  SQUARE   > ]]  . .. *\n\n\n");
}

void odd_num(int n)
{
    int i,j,num= 1 ;
    int nn=n* 3 / 2 ;

    for(i= 0 ; i < n; i++)
        for(j= 0 ; j < n; j++)
            m[(j-i+nn)%n][(i* 2 -j+n)%n]=num++;
}

void even_num(int n)
{
    int i,j,num= 1 ;
    int nminus=n- 1 ,nmiddle=n/ 2 ,nn=n*n+ 1 ;
    int osl= 0 ;
    int switch_row[ 2 ];
    int last_switch_column;
    int first_block=(n- 2 )/ 4 ,second_block=nminus-first_block;
    int first_inside=n/ 4 ,second_inside=nminus-first_inside;

    for(j= 0 ; j < n; j++)
        for(i= 0 ; i < n; i++) {
            if(i >= first_inside && i <= second_inside && j >= first_inside && j <= second_inside)
                m[i][j]=num;
            else if((i > first_block && i < second_block) || (j > first_block && j < second_block))
                m[i][j]=nn-num;
            else m[i][j]=num;
            num++;
        }
    if(!(n% 4 )) return;

    switch_row[ 0 ]=random(nmiddle- 1 )+first_block+ 1 ;
    switch_row[ 1 ]=random(nmiddle- 1 );
    if(switch_row[ 1 ] >= first_block) switch_row[ 1 ]+=(nmiddle+ 1 );
    last_switch_column=random(nmiddle- 1 );
    if(last_switch_column >= first_block) last_switch_column+=(nmiddle+ 1 );

/* Simply, you can write as follows.. 
    switch_row[0]=nmiddle;
    switch_row[1]=0;
    last_switch_column=0;
*/

    for(i= 0 ; i < nmiddle; i++) {
        if(i==first_block || i==second_block) {
            osl= 1 -osl;
            continue;
        }
        _swap(second_block, i, second_block, nminus-i);
        _swap(i, first_block, nminus-i, first_block);
        _swap(i, second_block, nminus-i, second_block);
        _swap(i, switch_row[osl], nminus-i, switch_row[osl]);
    }
    for(i=first_block+ 1 ; i < second_block; i++) {
        _swap(first_block, i, second_block, i);
        _swap(i, first_block, i, second_block);
    }
    _swap(first_block, nmiddle, second_block, nmiddle);
    _swap(last_switch_column, first_block, last_switch_column, second_block);
}

void output(int n)
{
    int i,j,ch,err= 0 ;
    unsigned long sum,sl,sc,sd1= 0 ,sd2= 0 ;

    sum=(unsigned long)n*(n*n+ 1 )/ 2 ;
    printf(";-) SUM = %lu.     * ..check sum... .  .    ",sum);
    for(j= 0 ; j < n; j++) {
        sd1+=m[j][j];
        sd2+=m[j][n-j- 1 ];
        sl= 0 ;
        sc= 0 ;
        for(i= 0 ; i < n; i++) {
            sl+=m[i][j];
            sc+=m[j][i];
        }
        if(sl!=sum) {
            err++;
            printf("\n> Sum of the row-(%d) is %lu. It's incorrect..",j+1,sl);
        }
        if(sc!=sum) {
            err++;
            printf("\n> Sum of the column-(%d) is %lu. It's incorrect..",j+ 1 ,sc);
        }
    }
    if(sd1!=sum) {
        err++;
        printf("\n> Sum of the diagonal-(\\) is %lu. It's incorrect..",j+1,sd1);
    }
    if(sd2!=sum) {
        err++;
        printf("\n> Sum of the diagonal-(/) is %lu. It's incorrect..",j+ 1 ,sd2);
    }
    if(err) printf("\n\n* %d errors are happened.",err);
    else printf("- O.K. -");
    printf("\n\n:-? Do you want to display(Y/n)? ");
    ch=getch();
    if(ch=='n' || ch=='N') return;
    printf("\n---+---------------------------------------------------------------------------");
    for(j= 0 ; j < n; j++) {
        printf("\n%2d)] ",j+ 1 );
        for(i= 0 ; i < n; i++)
            printf("%4d,",m[i][j]);
    }
    printf("\n---+---------------------------------------------------------------------------");
}

void _swap(int i1, int j1, int i2, int j2)
{
    int k;

    k=m[i1][j1];
    m[i1][j1]=m[i2][j2];
    m[i2][j2]=k;
}
...
Рейтинг: 0 / 0
Магический квадрат
    #33401603
zloy den
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я ему что-то в форуме по дельфи советовал(например, сюда написать:-).
Там мысль, конечно сыровата, но кое-что из нее можно взять
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Магический квадрат
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]