Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
1 / 1 / 0
Регистрация: 04.11.2017
Сообщений: 58
1

Календарь майя

29.08.2019, 23:04. Показов 2476. Ответов 20
Метки нет (Все метки)

Как известно, календарь майя заканчивался на 2012 году. Однако Чарли Фрост считает, что
календарь должен быть другим. Поэтому он попросил Джексон Кёртиса, чтобы тот помог составить календарь. Так как календарь Чарли Фроста будут проверять многие ученые, то к календарю
существуют четкие условия.
Календарь состоит из блоков, каждый из которых соответствует одному месяцу. Блоки расположены в виде таблицы из k столбцов и 12/k строк (k выбирается делителем числа 12). Месяцы
выводятся в следующем порядке: первая строка содержит блоки, соответствующие месяцам с первого по k-ый, следующая – с (k + 1)-го по 2k-ый, и т. д.
Ширина всех блоков в столбце должна быть одинакова, высота всех блоков равна семи (числу
дней в неделе). Между блоками различных строк таблицы выводится пустая строка, в каждой строке
между соседними блоками из разных столбцов выводится три пробела.
Блок, соответствующий месяцу, устроен следующим образом. Каждой (в том числе неполной)
неделе данного месяца в блоке соответствует столбец, имеющий ширину, равную двум. Между двумя
соседними столбцами в каждой строке выводится один пробел. Если несколько блоков располагаются в одном столбце календаря, то для выравнивания ширины в те блоки, которые содержат меньше
недель, в конец добавляется необходимое число пустых столбцов-недель. При этом разные столбцы
календаря могут иметь разную ширину.
Все числа месяца заносятся в блок, соответствующий этому месяцу. Число заносится строку
блока, соответствующую дню недели, на который приходится число в этом месяце. Число заносится
в столбец блока, соответствующий неделе, к которой относится данное число. Однозначные числа
дополняются слева одним пробелом. Таким образом, числа в столбце оказываются выравнены по
правому краю.


Так как Кертис сейчас занят спасением своей семьи, то составить такой календарь поручили
вам.


Формат входных данных

На вход в единственной строке поступают три целых положительных числа d, i и k (1 <= d <= 7,
0 <= i <= 1) — день недели, на который приходится первое января, параметр високосности года и
число столбцов из блоков месяцев в календаре. При этом если i = 1, если год високосный и i = 0
если год не високосный. Гарантируется что k является делителем 12.


Формат выходных данных
Выведите календарь в том формате, в котором требует Чарли Фрост.



Замечание
Для удобства, в примере мы заменили знак пробела на нижнее подчёркивание. При посылке
задачи вам надо выводить пробелы во всех тестах (включая первый).


входные данные
4 1 4

выходные данные
____5_12_19_26__________2__9_16_23____1__8_15_22_29_______5_ 12_19_26___
____6_13_20_27__________3_10_17_24____2__9_16_23_30_______6_ 13_20_27___
____7_14_21_28__________4_11_18_25____3_10_17_24_31_______7_ 14_21_28___
_1__8_15_22_29__________5_12_19_26____4_11_18_25_______1__8_ 15_22_29___
_2__9_16_23_30__________6_13_20_27____5_12_19_26_______2__9_ 16_23_30___
_3_10_17_24_31__________7_14_21_28____6_13_20_27_______3_10_ 17_24______
_4_11_18_25__________1__8_15_22_29____7_14_21_28_______4_11_ 18_25______
____________________________________________________________ ___________
____3_10_17_24_31_______7_14_21_28_______5_12_19_26_______2_ _9_16_23_30
____4_11_18_25_______1__8_15_22_29_______6_13_20_27_______3_ 10_17_24_31
____5_12_19_26_______2__9_16_23_30_______7_14_21_28_______4_ 11_18_25___
____6_13_20_27_______3_10_17_24_______1__8_15_22_29_______5_ 12_19_26___
____7_14_21_28_______4_11_18_25_______2__9_16_23_30_______6_ 13_20_27___
_1__8_15_22_29_______5_12_19_26_______3_10_17_24_31_______7_ 14_21_28___
_2__9_16_23_30_______6_13_20_27_______4_11_18_25_______1__8_ 15_22_29___
____________________________________________________________ ___________
____6_13_20_27__________4_11_18_25____1__8_15_22_29_______6_ 13_20_27___
____7_14_21_28__________5_12_19_26____2__9_16_23_30_______7_ 14_21_28___
_1__8_15_22_29__________6_13_20_27____3_10_17_24_______1__8_ 15_22_29___
_2__9_16_23_30__________7_14_21_28____4_11_18_25_______2__9_ 16_23_30___
_3_10_17_24__________1__8_15_22_29____5_12_19_26_______3_10_ 17_24_31___
_4_11_18_25__________2__9_16_23_30____6_13_20_27_______4_11_ 18_25______
_5_12_19_26__________3_10_17_24_31____7_14_21_28_______5_12_ 19_26______
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Миниатюры
Календарь майя   Календарь майя  
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.08.2019, 23:04
Ответы с готовыми решениями:

Календарь
Не могу доделать календарь, а именно просто хочу чтобы был сдвиг на необходимые дни. Изначально...

календарь
Даны натуральные числа А,В, С, которые обозначают число, месяц и год. Получить тройку чисел,...

Календарь в С
Задали задание написать календарь в С. Что бы вверху были дни недели написаные в строчку, а под...

Календарь
Дни недели пронумерованы следующим образом: 1 — понедельник, 2 — вторник, ... , 6 — суббота, 7 —...

20
1490 / 716 / 327
Регистрация: 17.11.2018
Сообщений: 1,798
31.08.2019, 04:01 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
int main()
{
    int D, I, K;
    bool check[12] = { 0 };  
    int year[12][7][6] = { 0 };
 
    cout << "d = "; cin >> D;
    cout << "i = "; cin >> I;
    cout << "k = "; cin >> K;
    cout << "\n";
 
    int daysInMonth[] = { 31, 28 + I, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
    int R = 12 / K;
    int n = D - 1;
 
    for( int k = 0; k < 12; k++ )
    {
        int day = 1;
        for( int i = 0; i < 6; i++ )
        {
            for( int j = ( i == 0 ? n : 0 ); j < 7; j++ )
            {
                if( day <= daysInMonth[k] )
                {
                    year[k][j][i] = day++;                    
                    n = ( j < 6 ? j + 1 : 0 );
                    check[k] = ( year[k][0][5] > 0 );
                }
            }
        }
    }
    for( int r = 0; r < R; r++ )
    {
        for( int i = 0; i < 7; i++ )
        {
            for( int k = 0; k < K; k++ )
            {
                int t = 5;
                for( int a = 0; a < R; a++ )
                {
                    if( check[a * K + k] )
                    {
                        t++;
                        break;
                    }
                }
                for( int j = 0; j < t; j++ )
                {
                    if( j )
                        cout << setw( 3 );
                    if( year[r * K + k][i][j] == 0 )
                        cout << ' ';
                    else
                        cout << year[r * K + k][i][j];
                }
                cout << "   ";
            }
            cout << "\n";
        }
        cout << "\n";
    }
    return 0;
}
1
1 / 1 / 0
Регистрация: 04.11.2017
Сообщений: 58
31.08.2019, 23:07  [ТС] 3
analogov net, код идеален, просто я для компилятора поставил на 47 строку
C++
1
cout << ' ';
, чтобы был идентичен как в примере.
0
1 / 1 / 0
Регистрация: 04.11.2017
Сообщений: 58
31.08.2019, 23:08  [ТС] 4
analogov net, Не знаю почему но в 17 тесте из100 дает ошибку модно ли его как то исправить??
0
Миниатюры
Календарь майя  
1490 / 716 / 327
Регистрация: 17.11.2018
Сообщений: 1,798
01.09.2019, 01:02 5
Цитата Сообщение от Xait Посмотреть сообщение
можно ли его как то исправить??
Xait, можно, наверное... Только нужно знать, что исправлять.
А где ты тестируешь?

Добавлено через 29 минут
Xait, если проблема с пробелами, то попробуй так:
удали (или закомментируй) строку 49 моего кода, а строку 50 измени на такую:
C++
1
cout << setw( j ? 3 : 2 );
Это будет точно, как в твоём примере...
0
1 / 1 / 0
Регистрация: 04.11.2017
Сообщений: 58
01.09.2019, 09:51  [ТС] 6
analogov net, тестируют на этом сайте, задача F

Добавлено через 1 час 41 минуту
analogov net, На этом сайте, http://ejudge.algocode.ru/cgi-... &prob_id=6

Добавлено через 54 секунды
analogov net, еще сделал как вы сказали но нет не помогло, не каких изменений
Вот что я отправляю для проверки:
Кликните здесь для просмотра всего текста
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
#include <iostream>
#include <iomanip>
 
using namespace std;
int main()
{
    int D, I, K;
    bool check[12] = { 0 };
    int year[12][7][6] = { 0 };
 
    cin >> D;
    cin >> I;
    cin >> K;
        int daysInMonth[] = { 31, 28 + I, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
    int R = 12 / K;
    int n = D - 1;
 
    for (int k = 0; k < 12; k++)
    {
        int day = 1;
        for (int i = 0; i < 6; i++)
        {
            for (int j = (i == 0 ? n : 0); j < 7; j++)
            {
                if (day <= daysInMonth[k])
                {
                    year[k][j][i] = day++;
                    n = (j < 6 ? j + 1 : 0);
                    check[k] = (year[k][0][5] > 0);
                }
            }
        }
    }
    for (int r = 0; r < R; r++)
    {
        for (int i = 0; i < 7; i++)
        {
            for (int k = 0; k < K; k++)
            {
                int t = 5;
                for (int a = 0; a < R; a++)
                {
                    if (check[a * K + k])
                    {
                        t++;
                        break;
                    }
                }
                cout << ' ';
                for (int j = 0; j < t; j++)
                {
                    if (j)
                        cout << setw(j ? 3 : 2);
                    if (year[r * K + k][i][j] == 0)
                        cout << ' ';
                    else
                        cout << year[r * K + k][i][j];
                }
                cout << "   ";
            }
            cout << "\n";
        }
        cout << "\n";
    }
    return 0;
}
0
1490 / 716 / 327
Регистрация: 17.11.2018
Сообщений: 1,798
01.09.2019, 14:43 7
Цитата Сообщение от Xait Посмотреть сообщение
в каждой строке
между соседними блоками из разных столбцов выводится три пробела.
А в твоём примере(и в моём коде, соответственно) - 4 пробела. Может в этом дело?


На сайт зайти не удаётся почему-то.
0
1 / 1 / 0
Регистрация: 04.11.2017
Сообщений: 58
01.09.2019, 14:51  [ТС] 8
analogov net,
Войти в контест: http://ejudge.algocode.ru/cgi-... t_id=10502

Логин: summer-qual-2019-104

Пароль: tROcxeZZ92tTgqo

Добавлено через 27 секунд
analogov net, Да проверил с пробелом но оно дает ошибку

Добавлено через 48 секунд
analogov net, Задача F

Добавлено через 4 минуты
analogov net, и пробелы в моем случае пока идеально, если на одну пробел сделаю больше или меньше контестер сразу говорит что с первый задачи ошибки
0
1490 / 716 / 327
Регистрация: 17.11.2018
Сообщений: 1,798
01.09.2019, 15:03 9
как файл должен называться
0
1 / 1 / 0
Регистрация: 04.11.2017
Сообщений: 58
01.09.2019, 15:04  [ТС] 10
analogov net, ни имеет значения просто надо сохранить cpp файл, и отправить
0
1490 / 716 / 327
Регистрация: 17.11.2018
Сообщений: 1,798
01.09.2019, 15:27 11
Xait, мне кажется что ошибка где-то с пробелами в какой-то момент происходит. с числами вроде бы все нормально.
0
1 / 1 / 0
Регистрация: 04.11.2017
Сообщений: 58
01.09.2019, 16:31  [ТС] 12
analogov net, Заметили?, но где? я почти попробовал все значение плюс еще посчитал все месяца(каждый 11 месяцев спустя повторяется), да числами все отлично но пробел меня тоже разъедает, что советуете сделать?

Добавлено через 58 минут
analogov net, думаю нашел где ошибка,
когда я ввожу 3 3 4, то февраль состоит из 32 дней и календарь показывает некорректную дату, думаю с пробелами все порядки?
Нам надо февралем надо что то сделать
Можете помочь с этим??
использовал следующий код:
Кликните здесь для просмотра всего текста
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
#include <iostream>
#include <iomanip>
 
using namespace std;
int main()
{
    int D, I, K;
    bool check[12] = { 0 };
    int year[12][7][6] = { 0 };
 
    cin >> D;
    cin >> I;
    cin >> K;
 
    int daysInMonth[] = { 31, 28 + I, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
    int R = 12 / K;
    int n = D - 1;
 
    for (int k = 0; k < 12; k++)
    {
        int day = 1;
        for (int i = 0; i < 6; i++)
        {
            for (int j = (i == 0 ? n : 0); j < 7; j++)
            {
                if (day <= daysInMonth[k])
                {
                    year[k][j][i] = day++;
                    n = (j < 6 ? j + 1 : 0);
                    check[k] = (year[k][0][5] > 0);
                }
            }
        }
    }
    for (int r = 0; r < R; r++)
    {
        for (int i = 0; i < 7; i++)
        {
            for (int k = 0; k < K; k++)
            {
                int t = 5;
                for (int a = 0; a < R; a++)
                {
                    if (check[a * K + k])
                    {
                        t++;
                        break;
                    }
                }
                for (int j = 0; j < t; j++)
                {
                    //if (j)
                        cout << setw(j ? 3:2);
                    if (year[r * K + k][i][j] == 0)
                        cout << ' ';
                    else
                        cout << year[r * K + k][i][j];
                }
                cout << "   ";
            }
            cout << "\n";
        }
        cout << "\n";
    }
    return 0;
}
0
1490 / 716 / 327
Регистрация: 17.11.2018
Сообщений: 1,798
01.09.2019, 16:34 13
искать нужно, иного пути нет...

Добавлено через 1 минуту
Цитата Сообщение от Xait Посмотреть сообщение
3 3 4
ты не можешь так вводить. или 0 или 1 посредине
0
1 / 1 / 0
Регистрация: 04.11.2017
Сообщений: 58
01.09.2019, 16:35  [ТС] 14
analogov net, ах, да тупанул можно ли ему установить ограничения ну либо 1 либо 0?

Добавлено через 12 секунд
скорее всего условию
0
1490 / 716 / 327
Регистрация: 17.11.2018
Сообщений: 1,798
01.09.2019, 16:38 15
можно, но думаю, что это лишнее...
0
1 / 1 / 0
Регистрация: 04.11.2017
Сообщений: 58
01.09.2019, 16:43  [ТС] 16
analogov net, да поставил но ничего не поменялось, все равно в 17 тесте ошибка,
0
348 / 282 / 144
Регистрация: 08.04.2013
Сообщений: 1,228
01.09.2019, 17:28 17
вернее всего проблема в 59 строке 12 поста строку cout << " "; заменить на if (k<K-1) cout << " ";
в конце 3 пробелов нет по условию
0
1 / 1 / 0
Регистрация: 04.11.2017
Сообщений: 58
01.09.2019, 17:54  [ТС] 18
marat_miaki, поменял но не помогло, и месяца теперь стала один пробел а надо было 3, код модете отправить
0
348 / 282 / 144
Регистрация: 08.04.2013
Сообщений: 1,228
01.09.2019, 18:16 19
Ну так пропишите 3 пробела " " при копировании он оставил один if (k<K-1) cout << " "; if (k<K-1) cout << "___"; есть же разница
C++
1
if (k<K-1) cout << "   ";
0
1 / 1 / 0
Регистрация: 04.11.2017
Сообщений: 58
01.09.2019, 18:33  [ТС] 20
marat_miaki, analogov net, так так вот я нашел где ошибка для проверки на глаз я поставил место пробелов знак _ и получилось вот так а надо было вот так
0
Миниатюры
Календарь майя   Календарь майя  
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.09.2019, 18:33

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Откомментируйте календарь
Объясните пожалуйста, почему в 18й строке вычитаем 2008? Ещё пожалуйста откомментируйте строки...

Вечный календарь
Привет, человеки. Я тут решаю задачу, которая проверяется автоматической системой. Вот...

Универсальный календарь
Требуется программа &quot;универсальный календарь&quot; для расчета дня недели для заданной даты, отображения...

Восточный календарь
Нужна помощь,ну или кто может написать код программы,про Восточный календарь! Сам текст: В...


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

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

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