Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 09.04.2023
Сообщений: 71

Найти количество моментов, когда минутная стрелка обгоняет часовую

28.11.2023, 18:33. Показов 1227. Ответов 15
Метки с++ (Все метки)

Студворк — интернет-сервис помощи студентам
Всем доброго времени суток! Кто может подсказать в чём моя ошибка в задаче, где надо найти количество моментов, когда минутная стрелка обгоняет часовую в процессе наблюдения. Первая строка ввода содержит начало наблюдения, вторая конец наблюдения. Если такое событие происходило, когда было начало или конец наблюдения, то оно также считается.
Код не проходит все тесты. Пример:
ввод: 23:50
00:20
вывод: 1
У меня идея заключается в том, чтобы ввести сначала часы начала наблюдения, потом двоеточие, потом минуты начала наблюдения, и также с концом наблюдения. А дальше уже сравнивать по часам и минутам. Помогите пожалуйста найти ошибку, или подскажите свою идею с этой задачей.
набирает 45 баллов из 100.
КОД:
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
#include <iostream>
#include <cmath>
using namespace std;
 
int main()
{
    int a,b;
    char c[1];
    int sum=0;
    cin>>a;
    for(int i=0; i<1; i++)
    cin>>c[i];
    cin>>b;
    int a1, b1;
    char c1[1];
    cin>>a1;
    for(int i=0; i<1; i++)
    cin>>c1[i];
    cin>>b1;
    if(b<=b1){
        if(a>a1)
        cout<<abs(a-(a1+24));
 
        else cout<<abs(a-a1)+1;
    }
    else if(b>b1){
       if(a>a1&&a1!=00)
        cout<<(abs(a-(a1+24)))+1;
        else if(a>a1&&a1==00)
            cout<<abs((a-(a1+24)));
        else cout<<abs(a-a1)-1;
    }
 
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
28.11.2023, 18:33
Ответы с готовыми решениями:

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

Найти время, которое должно пройти до момента, когда часовая и минутная стрелка будут перпендикулярны одна другой
Помогите написать программу,циклы нельзя использовать!!! Целые числа m(0&lt;m&lt;=12) и n(0&lt;=n&lt;60),которые определяют количество часов и...

Момент, когда часовая и минутная стрелка на циферблате расположатся перпендикулярно друг другу.
Даны целые числа m,n (0&lt;m&lt;=12,0&lt;=n&lt;60), указывающие момент времени: &quot;m часов, n минут&quot;. Определить наименьшее время (число полных минут),...

15
 Аватар для Tanya2007
593 / 230 / 72
Регистрация: 13.05.2020
Сообщений: 412
29.11.2023, 08:59
А вы учитываете, что на стрелочных часах всего 12 делений для часов? И в 12.00 дня и в 00.00 ночи, часовая стрелка всегда показывает строго на север.
0
0 / 0 / 0
Регистрация: 09.04.2023
Сообщений: 71
29.11.2023, 13:19  [ТС]
Tanya2007, учитываю
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6249 / 2961 / 1048
Регистрация: 01.06.2021
Сообщений: 10,998
29.11.2023, 13:44
Цитата Сообщение от Tanya2007 Посмотреть сообщение
на стрелочных часах всего 12 делений для часов
не всегда
Миниатюры
Найти количество моментов, когда минутная стрелка обгоняет часовую   Найти количество моментов, когда минутная стрелка обгоняет часовую  
1
0 / 0 / 0
Регистрация: 09.04.2023
Сообщений: 71
29.11.2023, 15:56  [ТС]
gunslinger, а как из этих задач переделать в нужную мне?
помогите пожалуйста, очень срочно!
0
place status here
 Аватар для gunslinger
3190 / 2227 / 640
Регистрация: 20.07.2013
Сообщений: 6,026
29.11.2023, 21:38
У меня так получилось (через функцию), особо не тестировал; и да, я еще тот *censored*:
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
// начальное время (НВ): h1 - часы, m1 - минуты
// конечное время (КВ): h2 - часы, m2 - минуты
unsigned func (int h1, int m1, int h2, int m2)
{
  const hh = 24, mm = 60, half_hh = hh / 2, step = mm / 5;
 
  // если данные некорректны, то возвращаем 0
  if (h1 < 0 || h1 > hh - 1 || m1 < 0 || m1 > mm - 1 || h2 < 0 || h2 > hh - 1 || m2 < 0 || m2 > mm - 1)
    return 0;
 
  // если НВ = КВ, то возвращаем 0
  if (h1 == h2 && m1 == m2)
    return 0;
 
  // счетчик (учитываем ситуацию "минутная стрелка не дальше часовой по кругу" у НВ)
  unsigned count =
           (1. * m1 / mm <= 1. * (h1 % half_hh) / half_hh + 1. * ((m1 / half_hh) % step) / mm) - !((h1 + 1) % half_hh);
 
  if (h2 != h1)  // если часовая стрелка КВ != НВ
  {
    // "переводим" стрелки (НВ) до начала следующего часа
    m1 = 0;  // эта строка не обязательна
    h1 = (h1 + 1) % hh;
  }
 
  // если КВ < НВ, то нужно "проходить через полночь"
  // то есть задача будет решаться в 2 этапа -
  // проверка времени (от НВ) до полуночи и после (до КВ)
  bool through_midnight = (h2 < h1) || (h2 == h1 && m2 < m1);
 
  if (through_midnight)  // проверяем до полуночи
  {
    // если "еще не полночь", то увеличиваем счетчик
    if (h1 != 0)
      count += (hh - h1 - 1);
 
    // если время в часах у НВ < 12
    if (h1 < half_hh)
      count--;  // уменьшаем счетчик
 
    h1 = 0;  // обнуляем часы у НВ
  }
 
  if (h2 > h1)  // если часовая стрелка КВ > НВ
  {
    count += h2 - h1;  // увеличиваем счетчик
 
    // если часовая стрелка КВ показывает полдень или полночь
    if (h2 % half_hh == 0)
      count--;  // уменьшаем счетчик
 
    // если разница в часах между КВ и НВ > 12
    if (h2 - h1 > half_hh)
      count--;  // уменьшаем счетчик
  }
 
  // учитываем ситуацию "минутная стрелка дальше часовой по кругу" у КВ
  count += (1. * m2 / mm > 1. * (h2 % half_hh) / half_hh + 1. * ((m2 / half_hh) % step) / mm);
 
  return count;
}
Пример вызова:
C++
1
func(23, 50, 0, 20);  // в результате получим 1
И я не совсем понял следующий момент (точнее, он у меня вызывает некоторые разногласия):
Цитата Сообщение от igorek_21 Посмотреть сообщение
Если такое событие происходило, когда было начало или конец наблюдения, то оно также считается.
Подразумевается, что когда у начального времени минутная стрелка дальше по кругу по сравнению с часовой стрелкой, то мы это считаем как (первый) "обгон" (что кажется мне странным)? Или нет?
И данное условие для конечного времени не имеет смысла (на мой взгляд).
1
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6249 / 2961 / 1048
Регистрация: 01.06.2021
Сообщений: 10,998
29.11.2023, 21:54
Цитата Сообщение от gunslinger Посмотреть сообщение
И я не совсем понял следующий момент
я это понимаю так, что если в вводе есть, например 01:05, то это тоже считается обгоном, т.к. в это время стрелки друг на друге.

Вот когда может быть такое событие:
1
place status here
 Аватар для gunslinger
3190 / 2227 / 640
Регистрация: 20.07.2013
Сообщений: 6,026
29.11.2023, 22:12
Равенство я учел (в 17 строке кода).
0
0 / 0 / 0
Регистрация: 09.04.2023
Сообщений: 71
30.11.2023, 15:01  [ТС]
gunslinger, ваш код не проходит несколько тестов к сожалению(
0
0 / 0 / 0
Регистрация: 09.04.2023
Сообщений: 71
01.12.2023, 19:38  [ТС]
Всем доброго времени суток! Кто может подсказать в чём моя ошибка в задаче, где надо найти количество моментов, когда минутная стрелка обгоняет часовую в процессе наблюдения. Первая строка ввода содержит начало наблюдения, вторая конец наблюдения. Если такое событие происходило, когда было начало или конец наблюдения, то оно также считается.
Код не проходит все тесты. Пример:
ввод: 23:50
00:20
вывод: 1
У меня идея заключается в том, чтобы ввести сначала часы начала наблюдения, потом двоеточие, потом минуты начала наблюдения, и также с концом наблюдения. А дальше уже сравнивать по часам и минутам. Помогите пожалуйста найти ошибку, или подскажите свою идею с этой задачей.
набирает 53 баллов из 100. Очень срочно!! Буду очень благодарен
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
#include <iostream>
#include <cmath>
using namespace std;
 
int main()
{
    int a,b;
    char c[1];
    int sum=0;
    cin>>a;
    for(int i=0; i<1; i++)
    cin>>c[i];
    cin>>b;
    int a1, b1;
    char c1[1];
    cin>>a1;
    for(int i=0; i<1; i++)
    cin>>c1[i];
    cin>>b1;
    if(b<=b1){
        if(a>a1)
        cout<<(abs(a-(a1+24)))-1;
 
        else {
            if(a==12&&b==00)cout<<(abs(a-a1))+1;
            else if(a==00&&b==00) cout<<(abs(a-a1));
            else cout<<abs(a-a1);
    }}
    else if(b>b1){
       if(a>a1&&a1!=00)
        cout<<(abs(a-(a1+24)))+1;
        else if(a>a1&&a1==00)
            cout<<(abs((a-(a1+24))));
        else if(a<=a1) cout<<(abs(a-a1))-1;
    }
 
}
0
0 / 0 / 0
Регистрация: 04.11.2023
Сообщений: 7
01.12.2023, 20:45
как то ты усложнил решение, ИМХО
C++
1
2
3
4
5
6
7
8
9
10
11
int main() {
    int h_start, h_end, m_start, m_end, time_start, time_end, time, count;
    std::cin >> h_start >> m_start >> h_end >> m_end;
    time_start = h_start; // * 60 +m_start;
    time_end = h_end; // * 60 + m_end;
    if (time_end < time_start) time_end += 24; //срабатывает при переходе через полночь
    time = time_end - time_start; // кол-во часов
    std::cout << "\ntime = " << time;
    count = time;// / 60;
    std::cout << "\ncount = " << count;
}
идея простая, количество раз, когда минутная стрелка обгоняет часовую - это количество пройденных часов (очень грубая математическая модель, так как не учитывает смещение часовой стрелки в течении часа). работает на твоих вводных данных, но не работает в пределах часа, например, 1:00 и 1:20. тут нужно помнить что шаг часовой стрелки это 12 минут (если быть точным) и доработать математическую модель. это тебе по поводу идей.
закомментированные куски выражений позволяют считать время в минутах, это может помочь, но, к сожалению сейчас нет времени допилить матмодель до ума, но в том краю правда )
0
0 / 0 / 0
Регистрация: 09.04.2023
Сообщений: 71
01.12.2023, 21:15  [ТС]
MarkDim, а можете пожалуйста написать что дальше делать с предложенным вами кодом, а то я честно говоря не понял
0
0 / 0 / 0
Регистрация: 04.11.2023
Сообщений: 7
01.12.2023, 21:25
как вариант, после вычисления количества ПОЛНЫХ (сорри за капс, не до конца изучил систему форматирования тут) часов, проверить
C++
1
if (m_start < m_end) count++;
но это, опять таки не учитывает смещение часовой стрелки на 1 минутное деление раз в 12 минут (кстати вопрос - учтено ли это в постановке задачи)
0
0 / 0 / 0
Регистрация: 09.04.2023
Сообщений: 71
01.12.2023, 21:26  [ТС]
MarkDim, спасибо!
0
0 / 0 / 0
Регистрация: 04.11.2023
Сообщений: 7
01.12.2023, 21:52
это с учетом смещения часовой стрелки, но без проверки входных данных
C++
1
2
3
4
5
6
7
8
9
10
11
12
int main() {
    int h_start, h_end, m_start, m_end, time_start, time_end, time, count, h_pos_start, h_pos_end;
    std::cin >> h_start >> m_start >> h_end >> m_end;
    time_start = h_start;
    time_end = h_end;
    if (time_end < time_start) time_end += 24; //срабатывает при переходе через полночь
    time = time_end - time_start; // кол-во часов
    count = time;
    h_pos_start = h_start * 5 + m_start / 12;
    h_pos_end = h_start * 5 + m_end / 12;
    if (h_pos < m_end) count++;
    std::cout << "\ncount = " << count;
для учета "Если такое событие происходило, когда было начало или конец наблюдения, то оно также считается." думаю необходимо заменить предпоследнюю строку на
C++
1
if (h_pos_end <= m_end || h_pos_start == m_start) count++;
но это надо тестить, если в постановке задачи учитывается это смещение.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
01.12.2023, 21:52
Помогаю со студенческими работами здесь

Определить наименьшее число полных минут до момента, когда часовая и минутная стрелка на циферблате совпадут
Даны целые числа h и m, указывающие момент времени &quot;h часов m минут&quot;. Определить наименьшее число полных минут, которые должны пройти до...

Определить наименьшее число полных минут до момента, когда часовая и минутная стрелка на циферблате совпадут
Даны целые числа h и m, указывающие момент времени &quot;h часов m минут&quot;. Определить наименьшее число полных минут, которые должны пройти до...

Определить наименьшее время, которое должно пройти до того момента, когда часовая и минутная стрелка на циферблате совпадут
помоги, буду очень благодарна) Записать тернарную операцию для решения данной задачи. Не использовать условный оператор. Составлять...

Найти, через какое время минутная и часовая стрелка будут взаимно располагаться под углом A
Имеется такая задачка : &quot;Есть часы, положение часовой и минутной стрелки у которых совпадают. ( например, в полдень ). Необходимо...

Минутная стрелка
Центр циферблата часов имеет координаты (0,0), а конец минутной стрелки - координаты (x, y). Ось ординат направлена вверх. Требуется...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru