Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.85
name?
198 / 169 / 18
Регистрация: 01.06.2010
Сообщений: 371
Завершенные тесты: 1
#1

Магический квадрат - C++

01.06.2010, 23:56. Просмотров 1778. Ответов 1
Метки нет (Все метки)

можно составить магический квадрат с первых 36 простых чисел? (сумма элементов которой в каждой срок, в каждом столбцы и по каждой Диагональ одинаковы)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.06.2010, 23:56
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Магический квадрат (C++):

Магический квадрат - C++
Всем привет! Вот во вторник экзамен по программированию, препод дала задачки разобрать пять штук, для подготоки, помогите если не сложно. ...

Магический квадрат) - C++
Определить, является ли заданная квадратная матрица порядка n магическим квадратом, т.е. матрицей, у которой суммы элементов строк и...

Магический квадрат - C++
Задана матрица целых чисел. Определить является ли она магическим квадратом, т.е. такой, в которой суммы элементов во всех строках и...

Магический квадрат - C++
с клавы вводиться число N. нужно сделать магический квадрат с размерами

Магический квадрат - C++
Опишу проблему, первая лаба по Си++, в прошлом году был просто Си, в Си немного понимаю, а теперь прога которую над сделать, ну не...

Магический квадрат - C++
Задача: Написать программу, которая определяет, явдяется ли заданная целочисленная квадратная матрица порядка N 'магическим квадратом',...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Mr.X
Эксперт С++
3049 / 1694 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
02.06.2010, 14:24 #2
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
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
//Можно ли составить магический квадрат из первых 36 простых чисел? 
//(Сумма элементов которого в каждой строке, в каждом столбце и по каждой 
//диагонали одинаковы.) 
#include <vector>
#include <iostream>
#include <algorithm>
#include <numeric>
#include <iomanip>
 
const int SQUARE_SIDE_LEN   = 6;
const int SQUARE_NUM_COUNT  = SQUARE_SIDE_LEN * SQUARE_SIDE_LEN;
 
typedef std::vector<int>  T_nums;
 
void fill_prost(T_nums&  nums)
{
    struct T_delitsya_na_predyd
    {
        bool  delitsya_na_predyd_;
        int   new_num_;
        T_delitsya_na_predyd(int  new_num) : delitsya_na_predyd_(false), new_num_(new_num)
        {}
        void operator() (int elem)
        {
            if(new_num_ % elem == 0)
            {
                delitsya_na_predyd_ = true;
            }
        }
        operator bool()
        {
            return  delitsya_na_predyd_;
        }
    };    
    
    for(int new_num = 2; nums.push_back(new_num), nums.size() < SQUARE_NUM_COUNT; )
    {        
        do; while(std::for_each(nums.begin(), nums.end(), T_delitsya_na_predyd(++new_num)));   
    }
}
 
void print_elem(int elem)
{
    static int i = 1;
    std::cout << std::setw(7) << elem;
    
    if(i++ % SQUARE_SIDE_LEN == 0)
    {
        std::cout << std::endl;
    }    
}
 
void print_comment(int begin_num, int square_sum)
{
    std::cout <<"Магический квадрат из первых "
              << SQUARE_NUM_COUNT
              << " простых чисел (начиная с "
              << begin_num
              <<") "
              << (square_sum % SQUARE_SIDE_LEN == 0 ? "возможен, " : "невозможен, ")
              << "так как сумма " 
              << square_sum 
              << " всех " 
              << SQUARE_NUM_COUNT 
              << " цифр квадрата при делении на "
              << SQUARE_SIDE_LEN
              << " дает в остатке "
              << square_sum % SQUARE_SIDE_LEN
              << "."              
              << std::endl
              << std::endl;
}
 
int main()
{
    std::locale::global(std::locale("rus"));
    T_nums  nums;
    fill_prost(nums);
    std::cout << "Итак, имеем следующие простые числа: " << std::endl;
 
    std::for_each(nums.begin(), nums.end(), print_elem);
 
    std::cout << std::endl
              << "Так как во всех "
              << SQUARE_SIDE_LEN 
              << " строках магического квадрата из первых "
              << SQUARE_NUM_COUNT
              << " простых чисел "
              << std::endl
              << "суммы должны быть равны, то сумма всех чисел квадрата должна делиться на "
              << SQUARE_SIDE_LEN 
              << ". "
              << std::endl
              << std::endl;    
 
    int square_sum = std::accumulate(nums.begin(), nums.end(), 0);
 
    int begin_num = 2;
    print_comment(begin_num, square_sum);    
 
    //Попробуем начать с единицы, т.е. заменим наибольшее последнее простое число
    //на единицу.
    begin_num = 1;
    nums.back() = begin_num;
    square_sum = std::accumulate(nums.begin(), nums.end(), 0);
    print_comment(begin_num, square_sum);       
    return 0;
}
Добавлено через 7 часов 43 минуты
Кстати, изменяя SQUARE_SIDE_LEN, можно исследовать квадраты различных размеров.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.06.2010, 14:24
Привет! Вот еще темы с ответами:

Магический квадрат - C++
прошу помочь в такой схеме решения магического квадрата. #include &lt;iostream&gt; using namespace std; #include &lt;Windows.h&gt; #include...

Задача.Магический квадрат. - C++
Хочу решить задачу. http://atpp.vstu.edu.ru/cgi-bin/arh_problems.pl?id_prb=994. Подскажите по какому принципу действовать? С чего...

Магический квадрат матрицы - C++
Доброго времени суток. Помогите пож-ста. Условие с++: Квадратная матрица M, состоящая из целых чисел, вводится с клавиатуры....

Магический квадрат, предикаты - C++
Доброе время суток, господа. Молю вас о помощи. Есть сие задание: Составить программу для решения одной из следующих задач....


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

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru