|
Формирование "красивой" цены | ☑ | ||
---|---|---|---|---|
0
turbomilk8
02.07.14
✎
07:31
|
Собственно есть диапазон чисел, например от 10864 до 11536, как (не перебором) получить число из этого диапазона с наибольшим количеством девяток, т.е. 10999?
|
|||
1
Armando
02.07.14
✎
07:37
|
Задача на собеседовании?
|
|||
2
turbomilk8
02.07.14
✎
07:38
|
(1) неа, просто одна из хотелок заказчика
|
|||
3
DmitryTokmakov
02.07.14
✎
07:50
|
меньшее число из диапазона округляешь в большую сторону, бОльшее - в меньшую. От бОльшего из получившихся отнимаешь 1. Вот только надо еще определить, до какого знака округлять.
|
|||
4
MSII
02.07.14
✎
07:51
|
Найти наибольшее кратное 10 и вычесть из него 1.
|
|||
5
SeraFim
02.07.14
✎
07:52
|
(4) 11529?
|
|||
6
Armando
02.07.14
✎
07:55
|
(0) >> не перебором
то есть за одну итерацию? |
|||
7
2S
02.07.14
✎
07:57
|
"10"+999
|
|||
8
patria0muerte
02.07.14
✎
07:58
|
(0)Можно попробовать привести к строкам равной длины (меньшее добить нулями впереди), потом сравнить посимвольно, начиная с первого символа. Если различаются символы, то от большего числа отнимаем все что за этим символом + 1.
Вроде должно сработать. |
|||
9
MSII
02.07.14
✎
07:58
|
(5) Неправильно сформулировал. Найти все кратные 10 в степени Х, где Х от 1 до СтрДлина(БольшееЧисло), входящие в диапазон, выбрать число с максимальным Х.
|
|||
10
skunk
02.07.14
✎
07:59
|
(9)это перебор
|
|||
11
Cube
02.07.14
✎
07:59
|
(0) Постановка задачи так себе...
Диапазон: 11536 - 11708. Какая цена "красивая"? 11599? 11699? |
|||
12
skunk
02.07.14
✎
08:00
|
(8)без перебора
|
|||
13
skunk
02.07.14
✎
08:00
|
(11)с наибольшим количество девяток ... в данном случае 10999
|
|||
14
skunk
02.07.14
✎
08:01
|
брр ... понял
|
|||
15
patria0muerte
02.07.14
✎
08:01
|
(12) я полагаю, ТС имел ввиду без перебора чисел в целом...
|
|||
16
SeraFim
02.07.14
✎
08:03
|
Округлить верхнюю границу вниз до 10000, проверить входят ли в диапазон. Если нет, продолжаем:
Округлить верхнюю границу вниз до 1000, проверить входят ли в диапазон. Если нет, продолжаем: Округлить верхнюю границу вниз до 100 вниз, проверить входят ли в диапазон. Если нет, продолжаем: Округлить верхнюю границу вниз до 10 вниз, проверить входят ли в диапазон. |
|||
17
vde69
модератор
02.07.14
✎
08:03
|
к1 - начало диапазона
к2 - конец диапазона один из вариантов: х=к1-(к2-к1)-1 |
|||
18
patria0muerte
02.07.14
✎
08:03
|
(0) Если цен с одинаковым наибольшим количеством девяток несколько, то полагаю что интересует наибольшее... так?
|
|||
19
Starhan
02.07.14
✎
08:03
|
(11)
11536 - 11708 ищем слева первую различающуюся цифру 115 117 смотри нет ли после 117 девяток Если есть - это красивая цена если нет Вычитаем 1 из 117 и добавляем девятки как то так. |
|||
20
skunk
02.07.14
✎
08:05
|
(17)10864 - (11536 - 10864) - 1 = 10191
|
|||
21
turbomilk8
02.07.14
✎
08:09
|
(6) можно и не в одну, но без перебора
|
|||
22
turbomilk8
02.07.14
✎
08:10
|
(11) наибольшее, мы же продаем и хотим получить больше прибыли
|
|||
23
vde69
модератор
02.07.14
✎
08:12
|
к2-(к2-к1) + Число(Прав("99999999999999",СтрДлина(Формат(к2-(к2-к1),"ЧГ=0"))-1))
|
|||
24
vde69
модератор
02.07.14
✎
08:15
|
(23) все равно не правильно :)
|
|||
25
skunk
02.07.14
✎
08:21
|
(23)тут может быть три ситуации разница имеет на 1 разряд больше, нужное количество разрядов и имеет на 1 разряд меньше
|
|||
26
JeHer
02.07.14
✎
08:24
|
Надо справа начинать. Т.е. в цикле найти девятку справа, проверить на диапазон и так далее.
|
|||
27
dmpl
02.07.14
✎
08:38
|
(0) Что значит "без перебора"? Как минимум, 1 "если" будет.
|
|||
28
Cube
02.07.14
✎
08:42
|
(22) Молоток.
То есть, в диапазоне 11001 - 11700 у нас красивая цена 11699, а в диапазоне 10990 - 11700 у нас красивая цена 10999... 700 рублей туда-сюда - какие пустяки... |
|||
29
Armando
02.07.14
✎
08:50
|
Разница = Верх - Низ;
Если Разница = 0 Тогда Сообщить("!!!"); Возврат; КонецЕсли; Если Верх%Pow(10, СтрДлина(Формат(Разница, "ЧГ=0"))) > Разница Тогда Сообщить(Верх - Верх%Pow(10, СтрДлина(Формат(Разница, "ЧГ=0"))-1) - 1); Иначе Сообщить(Верх - Верх%Pow(10, СтрДлина(Формат(Разница, "ЧГ=0"))) - 1); КонецЕсли; |
|||
30
dmpl
02.07.14
✎
08:53
|
(28) Очевидно, если задан такой диапанон - то действительно пустяки. Если не пустяки - будет задан меньший диапазон. Ваш КЭП.
|
|||
31
Armando
02.07.14
✎
08:58
|
(29) только надо еще проверки навтыкать, чтоб низ был меньше верха, и чтоб в диапазоне 9 проскакивала
|
|||
32
dmpl
02.07.14
✎
09:00
|
(31) Там бага есть. Диапазон 10000-11000 дает 9999. А чтобы от этого избавиться - придется цикл организовывать ;)
|
|||
33
dmpl
02.07.14
✎
09:13
|
+(32) И если цена с копейками - глючит (например, 10864,05 - 11536,76 дает -1) или неверный результат (например, при 10864,45 - 11536,95 дает 9999).
|
|||
34
Armando
02.07.14
✎
09:15
|
(32) если так заемнить Верх%Pow(10, СтрДлина(Формат(Разница, "ЧГ=0"))) >= Разница
|
|||
35
Armando
02.07.14
✎
09:15
|
(33) ну с копейками да. представим что их нет)
|
|||
36
Бешеная Нога
02.07.14
✎
09:30
|
сделай обычным перебором, будь мужиком, блеать! и не выноси мозг честным людям
|
|||
37
samozvanec
02.07.14
✎
09:34
|
а чем (3) не устроило?
|
|||
38
samozvanec
02.07.14
✎
09:41
|
или берешь верхнюю границу, первую цифру слева - отнять один, остальные девятки. и предусмотреть, что если первая цифра единица, то просто остальные девятки берешь без нее.
|
|||
39
samozvanec
02.07.14
✎
09:43
|
+(38) пардон, не так хотел сказать. по разрядам поделить и первый разряд уменьшать на 1, дополнить девятками.
|
|||
40
Крошка Ру
02.07.14
✎
09:54
|
(36) Перебором - это для тех у кого есть яйца. Остальные ищут обходные пути.
|
|||
41
Крошка Ру
02.07.14
✎
09:55
|
+(40) Вот ещё способ: делаешь массив от нижнего до верхнего предела. Сначала удаляешь из него цены без девяток, потом - цены с одной девяткой, потом - с двумя и т.д.
В живых должна остаться только одна цена! |
|||
42
turbomilk8
02.07.14
✎
09:58
|
(28) именно так, но больших перепадов не будет, т.к. диапазон
это +-3% к какой-то входящей цене. В моем примере это 11200, поэтому диапазон от 10864 до 11536. |
|||
43
turbomilk8
02.07.14
✎
09:59
|
(40) класс!!!
|
|||
44
turbomilk8
02.07.14
✎
10:01
|
(37) как узнать до какого знака округлять?
|
|||
45
dmpl
02.07.14
✎
10:04
|
(41) Делаешь регистр сведений КрасивыеЦены (где все красивые цены лежат), потом из него выбираешь запросом :)
|
|||
46
turbomilk8
02.07.14
✎
10:09
|
(45) и пусть заказчик его сам вручную заполняет, так и ко мне вопросов не будет, и сам в следующий раз не будет выдумывать фигню всякую :-)
|
|||
47
Крошка Ру
02.07.14
✎
10:12
|
(46) Не-не-не... Цены - красивые, поэтому заполнять регистр должен специально нанятый дизайнер!
|
|||
48
Крошка Ру
02.07.14
✎
10:15
|
(45) А идея хорошая! Есть в ней что-то такое, одинэсное... Один раз заполнил регистр, а потом - запросы к нему с любыми отборами, какие левая пятка пожелает.
|
|||
49
acsent
02.07.14
✎
10:19
|
не перебором но спуском вниз.
ш.1 Округляем до 10 вниз Если в диапазоне то ш2 ш2. Огругляем до 100 вниз итд |
|||
50
Бешеная Нога
02.07.14
✎
10:19
|
+1 к регистру с с записями от 1 до 100000 с ресурсом - количество девяток.
потом запрос к регистру по диапазону и получение максимального. имхо быстрее всего + можно использовать в запросе |
|||
51
SeraFim
02.07.14
✎
10:21
|
(50) а мы тут яхтами торгуем(
|
|||
52
Бешеная Нога
02.07.14
✎
10:22
|
(51) без шуток) механизм реально оптимальнее всего
|
|||
53
samozvanec
02.07.14
✎
10:23
|
(44) по количеству циферок. собственно, в (38) тоже самое, только велосипед локального производства
|
|||
54
Крошка Ру
02.07.14
✎
10:29
|
+(50) И заносить туда цены без девяток, тогда количество записей на порядок сократится.
|
|||
55
Крошка Ру
02.07.14
✎
10:33
|
*не заносить
|
|||
56
Armando
02.07.14
✎
10:35
|
(0) Автор, (29) и (34) не работает чтоле?
|
|||
57
turbomilk8
02.07.14
✎
11:50
|
(56) Проверяю. Большое спасибо за помощь
|
|||
58
PR
02.07.14
✎
12:30
|
(0) Цикл от 5 до 1, где 5 — длина числа.
5 девяток меньше числа? Если да, то это и есть максимальное число. Нет, тогда идем дальше по циклу. 4 девятки меньше числа? Если да, то это и есть максимальное число. Нет, тогда идем дальше по циклу. ... Прошли цикл и ничего не нашли? Значит число меньше 9. |
|||
59
PR
02.07.14
✎
12:31
|
(58) А, пардон, речь же не про максимальное число, а про число с максимальным количеством девяток.
|
|||
60
turbomilk8
02.07.14
✎
12:53
|
Да, именно так. Но число это должно быть в диапазоне: исходная цена +-3%
|
|||
61
PR
02.07.14
✎
12:55
|
(60) Мне кажется, проще всего сделать перебором от минимума до максимума.
|
|||
62
Djoko
02.07.14
✎
13:06
|
Попробуй брать по 1 символу с лева, до первого различающегося, в начальном и конечном диапазоне.
Начальные символы + (отличный символ из большего числа-1)+девятки. Только если диапазоны разной длинны, нужно в начале нули подставить. |
|||
63
wel_ko
02.07.14
✎
14:02
|
Попробуй так. Вроде работает.
Если СтрДлина(Цел(Число2))=2 Тогда Делитель2 = 10; ИначеЕсли СтрДлина(Цел(Число2))=3 Тогда Делитель2 = 100; Иначе Делитель2 = 1000; КонецЕсли; Число1Дел = Цел(Число1/Делитель2); Число2Дел = Цел(Число2/Делитель2); Если (Число2Дел-Число1Дел)<1 Тогда НовыйДелитель2 = Делитель2/10; Cообщить((Цел(Число2/НовыйДелитель2)*НовыйДелитель2)-1); Иначе Сообщить((Число2Дел*(Делитель2))-1); КонецЕсли; |
|||
64
turbomilk8
03.07.14
✎
08:03
|
Остановился на таком варианте:
Верх = Окр(1.03 * ИсходнаяЦена); Низ = Окр(0.97 * ИсходнаяЦена); Итератор = 1; КрасиваяЦена = ИсходнаяЦена; Пока Истина Цикл НоваяЦена = Окр(ИсходнаяЦена, -Итератор) - 1; Если НоваяЦена < Низ ИЛИ НоваяЦена > Верх Тогда Прервать; Иначе КрасиваяЦена = НоваяЦена; КонецЕсли; Итератор = Итератор + 1; КонецЦикла; |
|||
65
SeraFim
03.07.14
✎
08:16
|
(64) не выполняется условие максимальности)
По правилам округления, округлит вниз. Но вполне возможно, что и при округлении вверх число тоже было бы в пределах даипазона |
|||
66
turbomilk8
03.07.14
✎
08:23
|
(65) Это даже хорошо, а то он из 555 делал 569, а сейчас 559
|
|||
67
Starhan
03.07.14
✎
08:34
|
Может проще пройтись по всем разрядам округляя числа до этого рарзяда (в меньшую сторону) и вычитая большее из меньшего. Так найдешь отличающийся разряд.
Потом из этого числа вычесть 1. И учесть еще нет ли у большей цены сразу красивой цены |
|||
68
Эмбеддер
03.07.14
✎
08:37
|
(0) пусть заказчик просто составит список чисел, которые он считает красивыми
|
|||
69
Эмбеддер
03.07.14
✎
08:38
|
и 10999 как-то не похоже на красивое число
даже 11011 более красиво |
|||
70
Asmody
03.07.14
✎
08:41
|
Вроде в какой-то типовой был эльдорадоризатор цен
|
|||
71
Starhan
03.07.14
✎
08:51
|
Кстати 10999 это не красивая цена - а психологическая уловка
воспринмая как 10 тысяч плюс хвостик, а не 11 000 :) |
|||
72
SeraFim
03.07.14
✎
08:59
|
(71) О, Капитан, мой Капитан!
|
|||
73
Эмбеддер
03.07.14
✎
09:00
|
(70) в УТ 11 точно есть, называется "психологическое округление"
|
|||
74
Эмбеддер
03.07.14
✎
09:01
|
(71) еще удобно, что не надо у клиента мелочь просить, сдача всегда будет в кассе рублей 10)))
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |