LazarusLong
Ирландский доброволец
Проректор
Карма: +181/-7
Offline
Пол: Награды:
Сообщений: 6134
Ukrainian by birth, Irish by the grace of God
|
|
« : Май 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
Пол:
Сообщений: 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
Пол:
Сообщений: 143
|
|
« Ответ #2 : Май 22, 2007, 10:36:19 » |
|
а почему у меня половина сообщения курсивом отображается??
|
|
|
Записан
|
|
|
|
naxellar
Главный флудер
Проректор
Карма: +101/-52
Offline
Пол:
Сообщений: 5015
Главный флудер
|
|
« Ответ #3 : Май 22, 2007, 10:41:56 » |
|
- курсив ВВ. Используй тэгу "Код"
|
|
|
Записан
|
|
|
|
chilik
Бакалавр
Карма: +15/-1
Offline
Пол:
Сообщений: 143
|
|
« Ответ #4 : Май 22, 2007, 10:44:10 » |
|
да, действительно, не заметил =) щас исправлю
|
|
|
Записан
|
|
|
|
LazarusLong
Ирландский доброволец
Проректор
Карма: +181/-7
Offline
Пол: Награды:
Сообщений: 6134
Ukrainian by birth, Irish by the grace of God
|
|
« Ответ #5 : Май 22, 2007, 11:02:38 » |
|
Хм... вычисляет правильно, но не выполнено граничное условие - использовать только переменные целочисленного типа. Ведь int [] != int. Увы...
|
|
|
Записан
|
Когда ему нужно - он русский, когда нужно - украинец, а когда ему ни хрена не нужно - он ирландец.
"...Он любил говорить факин щит Когда что-то не так ему Принимал он свой самый ирландский вид И кидался трубкой в жену..."
|
|
|
chilik
Бакалавр
Карма: +15/-1
Offline
Пол:
Сообщений: 143
|
|
« Ответ #6 : Май 22, 2007, 11:07:20 » |
|
хм, я думал, что это подразумевает не использовать флоат. ну лана, буду менять
|
|
|
Записан
|
|
|
|
chilik
Бакалавр
Карма: +15/-1
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
Пол: Награды:
Сообщений: 6134
Ukrainian by birth, Irish by the grace of God
|
|
« Ответ #8 : Май 22, 2007, 11:42:22 » |
|
Совсем другое дело! +1
|
|
|
Записан
|
Когда ему нужно - он русский, когда нужно - украинец, а когда ему ни хрена не нужно - он ирландец.
"...Он любил говорить факин щит Когда что-то не так ему Принимал он свой самый ирландский вид И кидался трубкой в жену..."
|
|
|
LazarusLong
Ирландский доброволец
Проректор
Карма: +181/-7
Offline
Пол: Награды:
Сообщений: 6134
Ukrainian by birth, Irish by the grace of God
|
|
« Ответ #9 : Май 22, 2007, 11:44:50 » |
|
Извините, Вы не можете повторно изменить карму этому пользователю. Необходимо подождать 48 часов.
|
|
|
Записан
|
Когда ему нужно - он русский, когда нужно - украинец, а когда ему ни хрена не нужно - он ирландец.
"...Он любил говорить факин щит Когда что-то не так ему Принимал он свой самый ирландский вид И кидался трубкой в жену..."
|
|
|
chilik
Бакалавр
Карма: +15/-1
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 будешь должен вот и подкрался мой первый серьезный юбилей - 100 сообщений =)
|
|
|
Записан
|
|
|
|
naxellar
Главный флудер
Проректор
Карма: +101/-52
Offline
Пол:
Сообщений: 5015
Главный флудер
|
|
« Ответ #11 : Май 22, 2007, 11:48:29 » |
|
Я паставлю. Не против, LazarusLong??
|
|
|
Записан
|
|
|
|
LazarusLong
Ирландский доброволец
Проректор
Карма: +181/-7
Offline
Пол: Награды:
Сообщений: 6134
Ukrainian by birth, Irish by the grace of God
|
|
« Ответ #12 : Май 22, 2007, 11:49:10 » |
|
PS +1 будешь должен
Проценты нарастают? naxellar - ставь!
|
|
|
Записан
|
Когда ему нужно - он русский, когда нужно - украинец, а когда ему ни хрена не нужно - он ирландец.
"...Он любил говорить факин щит Когда что-то не так ему Принимал он свой самый ирландский вид И кидался трубкой в жену..."
|
|
|
LazarusLong
Ирландский доброволец
Проректор
Карма: +181/-7
Offline
Пол: Награды:
Сообщений: 6134
Ukrainian by birth, Irish by the grace of God
|
|
« Ответ #13 : Май 23, 2007, 02:29:14 » |
|
Еще чуть-чут оптимальнее (не меняя алгоритма, конечно) было бы заменить строку
if (ost==0) return 0;
На
if (!ost) return 0;
:-)
|
|
|
Записан
|
Когда ему нужно - он русский, когда нужно - украинец, а когда ему ни хрена не нужно - он ирландец.
"...Он любил говорить факин щит Когда что-то не так ему Принимал он свой самый ирландский вид И кидался трубкой в жену..."
|
|
|
naxellar
Главный флудер
Проректор
Карма: +101/-52
Offline
Пол:
Сообщений: 5015
Главный флудер
|
|
« Ответ #14 : Май 23, 2007, 02:32:58 » |
|
Еще чуть-чут оптимальнее (не меняя алгоритма, конечно) было бы заменить строку
if (ost==0) return 0;
На
if (!ost) return 0;
:-)
И что быстрее будет
|
|
|
Записан
|
|
|
|
LazarusLong
Ирландский доброволец
Проректор
Карма: +181/-7
Offline
Пол: Награды:
Сообщений: 6134
Ukrainian by birth, Irish by the grace of God
|
|
« Ответ #15 : Май 23, 2007, 02:35:38 » |
|
Константа не используется, хотя оптимальность данных выражений зависит от деталей реализации конкретного компилятора.
|
|
|
Записан
|
Когда ему нужно - он русский, когда нужно - украинец, а когда ему ни хрена не нужно - он ирландец.
"...Он любил говорить факин щит Когда что-то не так ему Принимал он свой самый ирландский вид И кидался трубкой в жену..."
|
|
|
Sochin
Злой модератор
Декан
Карма: +108/-6
Offline
Пол:
Сообщений: 1518
|
|
« Ответ #16 : Май 23, 2007, 04:24:56 » |
|
Константа не используется, хотя оптимальность данных выражений зависит от деталей реализации конкретного компилятора.
имхо, современный компилятор произведет оптимизацию обоих вариантов.
|
|
|
Записан
|
Говорят, когда компьютер сгорает, перед взором микропроцессора за долю секунды проносятся все операции, которые он когда-либо совершил... 壯鎭
|
|
|
LazarusLong
Ирландский доброволец
Проректор
Карма: +181/-7
Offline
Пол: Награды:
Сообщений: 6134
Ukrainian by birth, Irish by the grace of God
|
|
« Ответ #17 : Май 23, 2007, 06:03:57 » |
|
Конечно. Компилятор, скорее всего, причешет оба варианта и приведет их к общему знаменателю. Но ведь наверняка мы (я, по крайней мере) этого не знаем. Поэтому лучше сразу писать как можно оптимальнее. Без фанатизма конечно
|
|
|
Записан
|
Когда ему нужно - он русский, когда нужно - украинец, а когда ему ни хрена не нужно - он ирландец.
"...Он любил говорить факин щит Когда что-то не так ему Принимал он свой самый ирландский вид И кидался трубкой в жену..."
|
|
|
Sochin
Злой модератор
Декан
Карма: +108/-6
Offline
Пол:
Сообщений: 1518
|
|
« Ответ #18 : Май 23, 2007, 06:15:27 » |
|
Без фанатизма конечно Саша, ну вот это Еще чуть-чут оптимальнее (не меняя алгоритма, конечно) было бы заменить строку
if (ost==0) return 0;
На
if (!ost) return 0;
:-)
думаю уже недалеко от фанатизма. )) Тем более, что речи о языке реализации не было, а предлагаемое тобой усовершенствование для реализации на С++ подходит, а вот например для реализации на С# аж никак не подходит. ))
|
|
|
Записан
|
Говорят, когда компьютер сгорает, перед взором микропроцессора за долю секунды проносятся все операции, которые он когда-либо совершил... 壯鎭
|
|
|
NunTerix
|
|
« Ответ #19 : Май 23, 2007, 06:53:16 » |
|
Еще чуть-чут оптимальнее (не меняя алгоритма, конечно) было бы заменить строку
if (ost==0) return 0;
На
if (!ost) return 0;
:-)
Код будет аж на 2 символа меньше
|
|
|
Записан
|
Сердце может прибавить ума, но ум не может прибавить сердца.
|
|
|
|