КИТА unofficial
Ноябрь 23, 2024, 03:34:45 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.

Войти
Новости:
 
   Начало   ПРАВИЛА Помощь WIKI PDA Войти Регистрация  


Страниц: [1] 2  Все   Вниз
  Печать  
Автор Тема: Искусство программирования. (5)  (Прочитано 17482 раз)
0 Пользователей и 2 Гостей смотрят эту тему.
LazarusLong
Ирландский доброволец
Проректор
*****

Карма: +181/-7
Offline Offline

Пол: Мужской
Награды:
А может я тоже хочу себе награду?
Сообщений: 6134


Ukrainian by birth, Irish by the grace of God


WWW
« : Май 22, 2007, 08:21:19 »

Что-то я смотрю викторины по техническим предметам сошли на нет. Нехорошо это как-то Подмигивающий. Попытаемся реанимировать этот жанр:

Дано целое число K. Определить размер периода в десятичном представлении 1/K. Использовать только целочисленные переменные.
К примеру:
1/13 = 0,076923076923076923076923076923077 Период - 076923 - его размер - 6

1/6 = 0,16666666666666666666666666666666 Период - 6 его размер -1

и т.п.
« Последнее редактирование: Июль 27, 2007, 11:52:30 от vimmax » Записан

Когда ему нужно - он русский, когда нужно - украинец, а когда ему ни хрена не нужно - он ирландец.

"...Он любил говорить факин щит
Когда что-то не так ему
Принимал он свой самый ирландский вид
И кидался трубкой в жену..."
chilik
Бакалавр
**

Карма: +15/-1
Offline Offline

Пол: Мужской
Сообщений: 143



« Ответ #1 : Май 22, 2007, 10:31:36 »

Код:
int period (int k)
{int ost[200];
int o=10;
for (int i=0;;i++)
 {ost[i]=o;
  o=(o%k)*10;
  if (o==0) return 0;
  for (int j=0;j<=i;j++)
    if (o==ost[j])
      return 1+i-j;
 }
}
« Последнее редактирование: Май 22, 2007, 10:44:33 от chilik » Записан
chilik
Бакалавр
**

Карма: +15/-1
Offline Offline

Пол: Мужской
Сообщений: 143



« Ответ #2 : Май 22, 2007, 10:36:19 »

Off-Topic - помечено автором как "не соответствует обсуждаемой теме"
а почему у меня половина сообщения курсивом отображается??
Записан
naxellar
Главный флудер
Проректор
*****

Карма: +101/-52
Offline Offline

Пол: Мужской
Сообщений: 5015

Главный флудер


« Ответ #3 : Май 22, 2007, 10:41:56 »

Off-Topic - помечено автором как "не соответствует обсуждаемой теме"
Код:
{ost[i]=o;
Код:
[i]
- курсив ВВ.
 Используй тэгу "Код"
Записан
chilik
Бакалавр
**

Карма: +15/-1
Offline Offline

Пол: Мужской
Сообщений: 143



« Ответ #4 : Май 22, 2007, 10:44:10 »

Off-Topic - помечено автором как "не соответствует обсуждаемой теме"
да, действительно, не заметил =) щас исправлю
Записан
LazarusLong
Ирландский доброволец
Проректор
*****

Карма: +181/-7
Offline Offline

Пол: Мужской
Награды:
А может я тоже хочу себе награду?
Сообщений: 6134


Ukrainian by birth, Irish by the grace of God


WWW
« Ответ #5 : Май 22, 2007, 11:02:38 »

Хм... вычисляет правильно, но не выполнено граничное условие - использовать только переменные целочисленного типа.
Ведь int [] != int.
Увы...
Записан

Когда ему нужно - он русский, когда нужно - украинец, а когда ему ни хрена не нужно - он ирландец.

"...Он любил говорить факин щит
Когда что-то не так ему
Принимал он свой самый ирландский вид
И кидался трубкой в жену..."
chilik
Бакалавр
**

Карма: +15/-1
Offline Offline

Пол: Мужской
Сообщений: 143



« Ответ #6 : Май 22, 2007, 11:07:20 »

хм, я думал, что это подразумевает не использовать флоат. ну лана, буду менять
Записан
chilik
Бакалавр
**

Карма: +15/-1
Offline Offline

Пол: Мужской
Сообщений: 143



« Ответ #7 : Май 22, 2007, 11:35:36 »

Код:
int period (int k)
{int ost=10;
for (int j=0;;j++)
  {int o=10;
   for (int i=j;i<=200;i++)
    {o=(o%k)*10;
     if (o==0) return 0;
     if (o==ost) return 1+i-j;
    }
   ost=(ost%k)*10;
  }
}
Записан
LazarusLong
Ирландский доброволец
Проректор
*****

Карма: +181/-7
Offline Offline

Пол: Мужской
Награды:
А может я тоже хочу себе награду?
Сообщений: 6134


Ukrainian by birth, Irish by the grace of God


WWW
« Ответ #8 : Май 22, 2007, 11:42:22 »

Совсем другое дело! +1 Подмигивающий
Записан

Когда ему нужно - он русский, когда нужно - украинец, а когда ему ни хрена не нужно - он ирландец.

"...Он любил говорить факин щит
Когда что-то не так ему
Принимал он свой самый ирландский вид
И кидался трубкой в жену..."
LazarusLong
Ирландский доброволец
Проректор
*****

Карма: +181/-7
Offline Offline

Пол: Мужской
Награды:
А может я тоже хочу себе награду?
Сообщений: 6134


Ukrainian by birth, Irish by the grace of God


WWW
« Ответ #9 : Май 22, 2007, 11:44:50 »

Грустный
Извините, Вы не можете повторно изменить карму этому пользователю. Необходимо подождать 48 часов.
Записан

Когда ему нужно - он русский, когда нужно - украинец, а когда ему ни хрена не нужно - он ирландец.

"...Он любил говорить факин щит
Когда что-то не так ему
Принимал он свой самый ирландский вид
И кидался трубкой в жену..."
chilik
Бакалавр
**

Карма: +15/-1
Offline Offline

Пол: Мужской
Сообщений: 143



« Ответ #10 : Май 22, 2007, 11:46:40 »

последний релиз, оптимальнее немного =)
Код:
int period (int k)
{int ost=10;
for (int i=0;;i++)
  {ost=(ost%k)*10;
   if (ost==0) return 0;
   int o=10;
   for (int j=0;j<i;j++)
     {o=(o%k)*10;
      if (o==ost) return i-j;
     }
  }
}

PS +1 будешь должен Подмигивающий

Off-Topic - помечено автором как "не соответствует обсуждаемой теме"
вот и подкрался мой первый серьезный юбилей - 100 сообщений =)
Записан
naxellar
Главный флудер
Проректор
*****

Карма: +101/-52
Offline Offline

Пол: Мужской
Сообщений: 5015

Главный флудер


« Ответ #11 : Май 22, 2007, 11:48:29 »

Я паставлю. Не против, LazarusLong??
Записан
LazarusLong
Ирландский доброволец
Проректор
*****

Карма: +181/-7
Offline Offline

Пол: Мужской
Награды:
А может я тоже хочу себе награду?
Сообщений: 6134


Ukrainian by birth, Irish by the grace of God


WWW
« Ответ #12 : Май 22, 2007, 11:49:10 »

Цитировать
PS +1 будешь должен
Проценты нарастают? Смеющийся

naxellar - ставь!
Записан

Когда ему нужно - он русский, когда нужно - украинец, а когда ему ни хрена не нужно - он ирландец.

"...Он любил говорить факин щит
Когда что-то не так ему
Принимал он свой самый ирландский вид
И кидался трубкой в жену..."
LazarusLong
Ирландский доброволец
Проректор
*****

Карма: +181/-7
Offline Offline

Пол: Мужской
Награды:
А может я тоже хочу себе награду?
Сообщений: 6134


Ukrainian by birth, Irish by the grace of God


WWW
« Ответ #13 : Май 23, 2007, 02:29:14 »

Еще чуть-чут оптимальнее (не меняя алгоритма, конечно) было бы заменить строку

if (ost==0) return 0;

На

if (!ost) return 0;

:-)
Записан

Когда ему нужно - он русский, когда нужно - украинец, а когда ему ни хрена не нужно - он ирландец.

"...Он любил говорить факин щит
Когда что-то не так ему
Принимал он свой самый ирландский вид
И кидался трубкой в жену..."
naxellar
Главный флудер
Проректор
*****

Карма: +101/-52
Offline Offline

Пол: Мужской
Сообщений: 5015

Главный флудер


« Ответ #14 : Май 23, 2007, 02:32:58 »

Еще чуть-чут оптимальнее (не меняя алгоритма, конечно) было бы заменить строку

if (ost==0) return 0;

На

if (!ost) return 0;

:-)
И что быстрее будет
Записан
LazarusLong
Ирландский доброволец
Проректор
*****

Карма: +181/-7
Offline Offline

Пол: Мужской
Награды:
А может я тоже хочу себе награду?
Сообщений: 6134


Ukrainian by birth, Irish by the grace of God


WWW
« Ответ #15 : Май 23, 2007, 02:35:38 »

Константа не используется, хотя оптимальность данных выражений зависит от деталей реализации конкретного компилятора.
Записан

Когда ему нужно - он русский, когда нужно - украинец, а когда ему ни хрена не нужно - он ирландец.

"...Он любил говорить факин щит
Когда что-то не так ему
Принимал он свой самый ирландский вид
И кидался трубкой в жену..."
Sochin
Злой модератор
Декан
*****

Карма: +108/-6
Offline Offline

Пол: Мужской
Сообщений: 1518



« Ответ #16 : Май 23, 2007, 04:24:56 »

Константа не используется, хотя оптимальность данных выражений зависит от деталей реализации конкретного компилятора.

имхо, современный компилятор произведет оптимизацию обоих вариантов.
Записан

Говорят, когда компьютер сгорает, перед взором микропроцессора за долю секунды проносятся все операции, которые он когда-либо совершил...
壯鎭
LazarusLong
Ирландский доброволец
Проректор
*****

Карма: +181/-7
Offline Offline

Пол: Мужской
Награды:
А может я тоже хочу себе награду?
Сообщений: 6134


Ukrainian by birth, Irish by the grace of God


WWW
« Ответ #17 : Май 23, 2007, 06:03:57 »

Конечно. Компилятор, скорее всего, причешет оба варианта и приведет их к общему знаменателю. Но ведь наверняка мы (я, по крайней мере) этого не знаем. Поэтому лучше сразу писать как можно оптимальнее. Без фанатизма конечно Подмигивающий
Записан

Когда ему нужно - он русский, когда нужно - украинец, а когда ему ни хрена не нужно - он ирландец.

"...Он любил говорить факин щит
Когда что-то не так ему
Принимал он свой самый ирландский вид
И кидался трубкой в жену..."
Sochin
Злой модератор
Декан
*****

Карма: +108/-6
Offline Offline

Пол: Мужской
Сообщений: 1518



« Ответ #18 : Май 23, 2007, 06:15:27 »

Без фанатизма конечно Подмигивающий

Саша, ну вот это
Еще чуть-чут оптимальнее (не меняя алгоритма, конечно) было бы заменить строку

if (ost==0) return 0;

На

if (!ost) return 0;

:-)

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

Говорят, когда компьютер сгорает, перед взором микропроцессора за долю секунды проносятся все операции, которые он когда-либо совершил...
壯鎭
NunTerix
Декан
*****

Карма: +26/-1
Offline Offline

Пол: Мужской
Сообщений: 1688



« Ответ #19 : Май 23, 2007, 06:53:16 »

Еще чуть-чут оптимальнее (не меняя алгоритма, конечно) было бы заменить строку

if (ost==0) return 0;

На

if (!ost) return 0;

:-)

Код будет аж на 2 символа меньше  Смеющийся
Записан

Сердце может прибавить ума, но ум не может прибавить сердца.
Страниц: [1] 2  Все   Вверх
  Печать  
 
Перейти в:  

Penguins Counter Powered by MySQL Powered by PHP Powered by SMF 1.1.8 | SMF © 2006-2008, Simple Machines LLC Valid XHTML 1.0! Valid CSS! Internetmap
Страница сгенерирована за 0.279 секунд. Запросов: 32.