Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Алгоритм симметричной комбинации 
:(
    Опции темы
turtles
Дата 28.9.2011, 11:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 49
Регистрация: 17.2.2011

Репутация: нет
Всего: нет



Здравствуйте! Подскажите, как составить алгоритм по заданию или блок-схему?

Задание:

Электронные часы показывают время в формате от 00:00 до 23:59. Подсчитать сколько раз за сутки случается так, что слева от двоеточия показывается симметричная комбинация для той, что справа от двоеточия (например, 02:20, 11:11 или 15:51).

PM MAIL   Вверх
sQu1rr
Дата 28.9.2011, 11:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 597
Регистрация: 11.11.2008
Где: london

Репутация: нет
Всего: 13



На бумажке посчитать не дано?

Так можно вывести все комбинации
1.   цикл от 0 до 23 (пусть эти 2 цифры будут ab)
1.1 первое значение = 10a+b, второе 10b+a
1.2 записать в массив если max(a,b) < 6
2.   вывести

Считать еще проще
хммм дай подумать... наверное ответ 16, что можно и устно подсчитать smile, если считать 00:00 симметричным...

Псевдокод
Код

count = 0
for( i = 0; i < 24; ++i )
{
    a = floor(i / 10) mod 10
    b = i mod 10
    if( max(a,b) < 6 ) count++
}


Добавлено через 1 минуту и 10 секунд
Надеюсь, объяснять почему так не нужно, знакомы с математикой?
PM MAIL Skype GTalk   Вверх
_Y_
Дата 28.9.2011, 13:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1651
Регистрация: 27.11.2006

Репутация: 8
Всего: 34



Что-то я не въезжаю. А зачем здесь алгоритм? 24 раза вроде получается по-любому


--------------------
Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:)
PM MAIL WWW   Вверх
1000000dollars
Дата 28.9.2011, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 231
Регистрация: 6.10.2007

Репутация: 1
Всего: 8



Алгоритм примерно такой:

Код

cout = 0; // счётчик комбинаций

for (int a=0; a<2; ++a) // диапазон старшего разряда часов (остальные очевидно рассматирвать не надо)
 for (int b=0; b<6; ++b) // диапазон старшего разряда минут
  if (((a*10+b)<24)&&((b*10+a)<60)) (получается допустимое время?)
   count++; // счётчик увеличиваем


Рисовать блок-схему нет ни желания, ни времени.
PM MAIL   Вверх
sQu1rr
Дата 28.9.2011, 15:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 597
Регистрация: 11.11.2008
Где: london

Репутация: нет
Всего: 13



Цитата(_Y_ @  28.9.2011,  13:37 Найти цитируемый пост)
Что-то я не въезжаю. А зачем здесь алгоритм? 24 раза вроде получается по-любому 

Не совсем, ты прав в первом, что алгоритм не нужен, но не прав во втором, что 24. Потому что например у 7 часов или 8... нету симметричных представлений в минутах.
PM MAIL Skype GTalk   Вверх
_Y_
Дата 29.9.2011, 18:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1651
Регистрация: 27.11.2006

Репутация: 8
Всего: 34



Цитата(sQu1rr @  28.9.2011,  15:46 Найти цитируемый пост)
7 часов или 8... нету симметричных представлений в минутах. 

Точно. Извиняюсь. В силу специфики своей работы с миллисекундами дело имею в осноном, а они всегда десятичные. smile 


--------------------
Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:)
PM MAIL WWW   Вверх
htoit
Дата 30.9.2011, 16:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 27.8.2011

Репутация: нет
Всего: нет



Цитата(_Y_ @ 29.9.2011,  18:42)
Цитата(sQu1rr @  28.9.2011,  15:46 Найти цитируемый пост)
7 часов или 8... нету симметричных представлений в минутах. 

Точно. Извиняюсь. В силу специфики своей работы с миллисекундами дело имею в осноном, а они всегда десятичные. :search


Код

int a, b, i, count = 0;
for (i = 0; i < 23; i++) {
    a = i / 10;
    b = i % 10;
    minutes = 10 * b + a;
    if ((minutes <= 60) &&
        (minutes == i))) {
        count++;
        printf ("\n%02d:%02d", i, minutes);
    }
}
printf ("\ncount = %d", count);




PM MAIL   Вверх
sQu1rr
Дата 1.10.2011, 00:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 597
Регистрация: 11.11.2008
Где: london

Репутация: нет
Всего: 13



Цитата(htoit @ 30.9.2011,  16:31)
Цитата(_Y_ @ 29.9.2011,  18:42)
Цитата(sQu1rr @  28.9.2011,  15:46 Найти цитируемый пост)
7 часов или 8... нету симметричных представлений в минутах. 

Точно. Извиняюсь. В силу специфики своей работы с миллисекундами дело имею в осноном, а они всегда десятичные. smile


Код

int a, b, i, count = 0;
for (i = 0; i < 23; i++) {
    a = i / 10;
    b = i % 10;
    minutes = 10 * b + a;
    if ((minutes <= 60) &&
        (minutes == i))) {
        count++;
        printf ("\n%02d:%02d", i, minutes);
    }
}
printf ("\ncount = %d", count);

ошиблись в цикле, там <= 23 должно быть
Да и вообще посмешили. По вашим суждениям, в сутках 23 часа, минут может быть 60, а автор о симметричности ничего совершенно не говорил

Это сообщение отредактировал(а) sQu1rr - 1.10.2011, 00:03
PM MAIL Skype GTalk   Вверх
_Y_
Дата 1.10.2011, 13:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1651
Регистрация: 27.11.2006

Репутация: 8
Всего: 34



Что-то все-таки очень уж простую задачу решаем. Я бы сделал просто и влоб:

1. Обнуляем счетчик часов H=0 и счетчик симметричных результатов N=0
2. Получаем старший разряд часов целочисленным делением с отбрасыванием остатка S=H\10
3. Считаем младший разряд часов L=H-S*10
4. Считаем десятичное представление количества минут, симметричное часам M=L*10+S
5. Если M<60 значит такое число минут существует в рамках традиционного шестидесятеричного представления. Присваиваем N=N+1
6. H=H+1
7. Если H==24 заканчиваем цикл, если нет - возвращаемся к пункту 2.
8. Выводим результат N


--------------------
Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:)
PM MAIL WWW   Вверх
htoit
Дата 2.10.2011, 20:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 27.8.2011

Репутация: нет
Всего: нет



Цитата(sQu1rr @ 1.10.2011,  00:01)
Цитата(htoit @ 30.9.2011,  16:31)
Цитата(_Y_ @ 29.9.2011,  18:42)
Цитата(sQu1rr @  28.9.2011,  15:46 Найти цитируемый пост)
7 часов или 8... нету симметричных представлений в минутах. 

Точно. Извиняюсь. В силу специфики своей работы с миллисекундами дело имею в осноном, а они всегда десятичные. smile


Код

int a, b, i, count = 0;
for (i = 0; i < 23; i++) {
    a = i / 10;
    b = i % 10;
    minutes = 10 * b + a;
    if ((minutes <= 60) &&
        (minutes == i))) {
        count++;
        printf ("\n%02d:%02d", i, minutes);
    }
}
printf ("\ncount = %d", count);

ошиблись в цикле, там <= 23 должно быть
Да и вообще посмешили. По вашим суждениям, в сутках 23 часа, минут может быть 60, а автор о симметричности ничего совершенно не говорил


Да, не получается пока без отладки. 
По моим суждения в сутках 24 часа, но числа 24 в часах не бывает, как и числа 60 в минутах.

Код

int a, b, i, count = 0;
for (i = 0; i <= 23; i++) {
    a = i / 10;
    b = i % 10;
    minutes = 10 * b + a;
    if ((minutes < 60) &&
        (minutes == i))) {
        count++;
        printf ("\n%02d:%02d", i, minutes);
    }
}
printf ("\ncount = %d", count);

PM MAIL   Вверх
sQu1rr
Дата 3.10.2011, 17:39 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 597
Регистрация: 11.11.2008
Где: london

Репутация: нет
Всего: 13



Зачем все так усложнять, что бы посчитать кол-во достаточно убедиться, что b меньше 6

Код

int count = 0;
for(int i = 0; i != 24; ++i)
    if(int % 10 < 6)
        count++


Это сообщение отредактировал(а) sQu1rr - 3.10.2011, 17:40
PM MAIL Skype GTalk   Вверх
htoit
Дата 10.10.2011, 05:54 (ссылка)  | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 27.8.2011

Репутация: нет
Всего: нет



Цитата(sQu1rr @ 3.10.2011,  17:39)
Зачем все так усложнять, что бы посчитать кол-во достаточно убедиться, что b меньше 6

Код

int count = 0;
for(int i = 0; i != 24; ++i)
    if(int % 10 < 6)
        count++

Мысль замечательная, но как злопамятный человек, не мог не вспомнить поговорку "и на старуху бывает проруха":
"int % 10 < 6" smile 

и еще " i != 24" -- проблемный стиль программирования, i < 24 дуракоустойчивей
"++i" -- это тоже какая-то тревога. Может ничего страшного и не будет, но лучше таких конструкций вообще не употреблять. Тяжело читать.

Это сообщение отредактировал(а) htoit - 10.10.2011, 05:55
PM MAIL   Вверх
volatile
Дата 11.10.2011, 01:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 2
Всего: 85



Цитата(htoit @  10.10.2011,  05:54 Найти цитируемый пост)
"++i" -- это тоже какая-то тревога. Может ничего страшного и не будет, но лучше таких конструкций вообще не употреблять. Тяжело читать.


htoit, это нормально. А в некоторых случаях, даже предпочтительнее (например в итераторах). Впрочем здесь без разницы, но по-принципу однотипности, применять вполне разумно.

Добавлено через 7 минут и 17 секунд
Ну и коль влез в эту тему (и как пример что значит "Тяжело читать"), мой вариант:
http://liveworkspace.org/code/8085adb78d39...940c966390ee9ab
smile 

PM MAIL   Вверх
sQu1rr
Дата 11.10.2011, 19:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 597
Регистрация: 11.11.2008
Где: london

Репутация: нет
Всего: 13



Цитата(htoit @  10.10.2011,  05:54 Найти цитируемый пост)
int % 10 < 6

бугагашенька, как видишь код не проверял ))))


Цитата(htoit @  10.10.2011,  05:54 Найти цитируемый пост)
и еще " i != 24" -- проблемный стиль программирования, i < 24 дуракоустойчивей

ну не для дураков же писал smile знаю, дурацкая привычка
PM MAIL Skype GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0924 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.