Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
15 / 3 / 0
Регистрация: 18.01.2023
Сообщений: 282

Спираль

23.02.2023, 18:01. Показов 2041. Ответов 36
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В левом верхнем углу прямоугольного поля размера N ×M сидит Черепашка. Она хочет закрасить некоторые клетки по спирали, закручивающейся к центру, как на рисунке: Определите, сколько клеток ей придётся закрасить.

Формат входных данных Первая строка входных данных содержит число N высоту прямоугольника, вторая строка содержит число M ширину прямоугольника. Все числа целые положительные и не превосходят 2 ×109.

Формат выходных данных Программа должна вывести одно целое число количество клеток, закрашенных Черепашкой. Обратите внимание, что ответ в этой задаче может превышать возможное значение 32-битной целочисленной переменной, поэтому необходимо использовать 64-битные целочисленные типы данных (тип int64 в языке Pascal, тип long long в C++, тип long в Java и C#).

Система оценки Решения, правильно работающие, когда числа N и M не превосходят 100, будут оцениваться в 40 баллов. Решения, правильно работающие, когда числа N и M не превосходят 105, будут оцениваться в 60 баллов.
Примеры стандартный ввод
5
6
Вывод
20

Ввод
1
5
Вывод
5

Помогите понять по какому принципу красятся клетки
Миниатюры
Спираль  
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
23.02.2023, 18:01
Ответы с готовыми решениями:

Спираль
По введенным значениям n, m (1 ≤ n ≤ 20, 1 ≤ m ≤ 20) заполните массив размерностью n × m числами от 1 до mn, расположив их по спирали,...

Спираль Улама
Помогите пожалуйста, на языке си написать программу спираль Улама.Ввести рандомную матрицу и вместо простых чисел оставить*,а вместо...

спираль архимеда
Наткнулся на задачку, битый час голову ломаю, суть задачи такова, с++ построить спираль архимена из чисел формата 30 29 28 27 26 25 31...

36
15 / 3 / 0
Регистрация: 18.01.2023
Сообщений: 282
25.02.2023, 15:18  [ТС]
Студворк — интернет-сервис помощи студентам


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
int fourth()
{
    int N;
    int M;
    std::cin >> N;
    std::cin >> M;
    if (N == 1)
        return M;
    if (M == 1)
        return N;
    long long paintto{ 0 };
    paintto += N;
    N -= 1;
    M -= 1;
        do {
            if (N < 0 || M < 0)
                break;
            paintto += N;
            paintto += M;
            if (N <= 1 || M <= 2)
                return N + M - 1;
            M -= 2;
            N -= 2;
        } while (true);
        return paintto;
}
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13233 / 6865 / 1827
Регистрация: 18.10.2014
Сообщений: 17,398
25.02.2023, 16:52
Цитата Сообщение от Человек Челов Посмотреть сообщение
C++
1
2
/* 20 */    if (N <= 1 || M <= 2)
/* 21 */        return N + M - 1;
Ваш цикл "скорее всего" будет заканчиваться вот по этому return. При этом значение paintto игнорируется и все усилия по его накоплению идут коту под хвост. Вам это не кажется странным?
0
15 / 3 / 0
Регистрация: 18.01.2023
Сообщений: 282
25.02.2023, 18:07  [ТС]
TheCalligrapher, кажется, реализовал наперекосяк, хотел учесть некоторые условия

Добавлено через 38 секунд
По крайней мере код правильно отвечает на данные тесты, насчёт исключительных случаев уверен что результаты неверные

Добавлено через 3 минуты
TheCalligrapher, ваш код мне кажется верным , однако непонятно почему в цикле -2 без изначального вычета единицы.
Возникает последовательность -2 -4 ...

Добавлено через 3 минуты
TheCalligrapher, я поэтому и сказал, что если расписать ваш код с помощью нескольких условий и через другой цикл то результат будет неверным
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13233 / 6865 / 1827
Регистрация: 18.10.2014
Сообщений: 17,398
25.02.2023, 18:29
Цитата Сообщение от Человек Челов Посмотреть сообщение
что если расписать ваш код с помощью нескольких условий и через другой цикл то результат будет неверным
???

Если вы "расписали мой код через другой цикл" и результат у вас получился иным, значит вы неправильно "расписали мой код через другой цикл".
Миниатюры
Спираль  
0
15 / 3 / 0
Регистрация: 18.01.2023
Сообщений: 282
25.02.2023, 18:41  [ТС]
Так почему уменьшение на 2 в цикле?
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13233 / 6865 / 1827
Регистрация: 18.10.2014
Сообщений: 17,398
25.02.2023, 18:51
Лучший ответ Сообщение было отмечено Человек Челов как решение

Решение

Цитата Сообщение от Человек Челов Посмотреть сообщение
Так почему уменьшение на 2 в цикле?
Идея, которую я реализовывал в своем коде, сводится к "рекурсивному" рассмотрению проблемы.

На каждом этапе мы закрашиваем вертикаль и горизонталь из суммарно N+M клеток, после чего мы переходим к вложенной проблеме того же рода, но размера (N-2, M-2)



(Во вложенной проблеме на картинке выше мы будем начинать закрашивать дальше с правого нижнего угла, но это совершенно не принципиально.)

Вот так мы и решаем проблему: переходя от (N, M) к (N-2, M-2) и так далее...

Надо только быть осторожным с базисом рекурсии: когда задача становится узкой/маленькой (условие N <= 1 || M <= 2), решение равно не N+M, а N+M-1.
Изображения
 
0
15 / 3 / 0
Регистрация: 18.01.2023
Сообщений: 282
25.02.2023, 18:53  [ТС]
Благодарю за пояснение
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13233 / 6865 / 1827
Регистрация: 18.10.2014
Сообщений: 17,398
25.02.2023, 19:38
... из этого всего, кстати, следует, что никакого цикла для решения этой задачи не нужно: задача может быть решена прямой формулой плюс, возможно, пара-тройка ветвлений.
1
15 / 3 / 0
Регистрация: 18.01.2023
Сообщений: 282
25.02.2023, 20:47  [ТС]
верно, у них на сайте было еще одно решение на питоне
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
n = int (input ( ) )
m = int (input ( ) )
k = min( n − 1 , m − 1 ) // 2
ans = ( ( n + m) + ( n + m) − 4 ∗ ( k − 1 ) ) ∗ k // 2
n −= 2 ∗ k
m −= 2 ∗ k
i f n == 1 :
ans += m
e l i f m == 1 :
ans += n
e l i f m == 2 :
ans += n + 1
e l s e : # n == 2 , m > 2
ans += m + 2
pr int ( ans )
Добавлено через 12 минут
тут также получается прямоугольник N-2*M-2

Добавлено через 4 минуты
и стартует арифметическая прогрессия, только я не очень понял почему минимальное делится на 2

Добавлено через 13 минут
все же интересно,что нужно добавить в этот код, чтобы он был справедлив для всех значений
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
int fourth()
{
    int N;
    int M;
    std::cin >> N;
    std::cin >> M;
    if (N == 1)
        return M;
    if (M == 1)
        return N;
    long long paintto{ 0 };
    paintto += N;
    N -= 1;
    M -= 1;
        do {
            if (N < 0 || M < 0)
                break;
            paintto += N;
            M -= 2;
            N -= 2;
        } while (true);
        return paintto;
}
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
25.02.2023, 21:20
Цитата Сообщение от Человек Челов Посмотреть сообщение
верно, у них на сайте было еще одно решение на питоне
Самому то никак, ничего, не получилось ? Восходящая звезда
0
15 / 3 / 0
Регистрация: 18.01.2023
Сообщений: 282
25.02.2023, 21:29  [ТС]
SmallEvil, не отрицаю , получилось только на некоторую часть значений.(код выше)
а ты умник, покажи свой уровень и напиши как следует, научи
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
25.02.2023, 21:40

Не по теме:

Цитата Сообщение от Человек Челов Посмотреть сообщение
покажи свой уровень и напиши как следует, научи
Не каждый может научить, и не каждый может научится.
Ты из последних.

К тому же, я на слабо не ведусь.



Добавлено через 1 минуту
Цитата Сообщение от Человек Челов Посмотреть сообщение
покажи свой уровень и напиши как следует
Я тебе уверенно написал что это возможно.
Спираль
Ты же меня сразу же послал, мол анализ задачи это не для тебя.
Ну и флаг тебе в .... руки.
0
15 / 3 / 0
Регистрация: 18.01.2023
Сообщений: 282
25.02.2023, 21:49  [ТС]
так а что тебе доверять, ты в основном издеваешься , а не отвечаешь
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
25.02.2023, 21:56
Когда я отвечаю, ты говоришь что тебе видней.
К тому же, тебе тут никто не обязан делать задания за тебя.
0
15 / 3 / 0
Регистрация: 18.01.2023
Сообщений: 282
25.02.2023, 22:01  [ТС]
так я в курсе, но я говорю что ты твои ответы в основном бессмысленные так что неудивительно что по твоим советам никто(по крайней мере я) не делает
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
25.02.2023, 22:43
Цитата Сообщение от Человек Челов Посмотреть сообщение
но я говорю что ты твои ответы в основном бессмысленные

Ясно понятно.
Цитата Сообщение от SmallEvil Посмотреть сообщение
и не каждый может научится
0
15 / 3 / 0
Регистрация: 18.01.2023
Сообщений: 282
25.02.2023, 22:46  [ТС]
ладно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.02.2023, 22:46

Спираль в треугольнике
Знатоки консольной графики, может кто пожалуйста объяснить, как можно сделать выведение треугольника таким типом (схема ) через примитивные...

Спираль Улама C++
Помогите найти ошибку. #include&lt;iostream&gt; #include&lt;vector&gt; #include &lt;iomanip&gt; #include&lt;math.h&gt; using namespace std; //...

Двойная спираль в C++
Нужно построить двумерный массив, с заполнением двойной спиралью. Самое сложное что сделать это нужно через один (For). For для вывода...

Матрица-спираль
всем привет дано такое задание Написать и протестировать функцию MtrSpiral(n), формирующую квадратную матри-цу n*n вида ...

Рекурсия c ++ Спираль!
Здравствуйте! Помогите решить задачу! Используя рекурсию.... http://s003.***********/i202/1110/9f/cbca2e936243.jpg


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

Или воспользуйтесь поиском по форуму:
37
Ответ Создать тему
Новые блоги и статьи
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru