|
Любителям алгоритмов, просьба подсказать | ☑ | ||
---|---|---|---|---|
0
Простенький вопросик
11.05.12
✎
12:01
|
Есть 2 массива с заданным количеством элементов, оба упорядочены по возрастанию. Как в 1 цикл создать новый массив, упорядоченный по возрастанию? Собственно требуется цикл на языке 8ки.
|
|||
1
Cube
11.05.12
✎
12:03
|
Пока Истина Цикл
НовыйМассив = Новый Массив; Прервать; КонецЦикла; |
|||
2
Простенький вопросик
11.05.12
✎
12:04
|
(1)
не, бред мне не надо |
|||
3
Feanor
11.05.12
✎
12:05
|
1. Создать ТЗ
2. Засунуть туда 1-ый массив 3. Засунуть туда 2-ой массив 4. Отсортировать 5. Выгрузить колонку из ТЗ 6. Профит с тебя 20 баксов |
|||
4
Cube
11.05.12
✎
12:06
|
(2) Что посеешь, то и пожнешь. Слыхал?))
А так: какие вопросы - такие ответы. А вот ещё: Как крикнется, так и аукнется. Продолжать?)) Ставь нормально вопрос, получай нормальный ответ. |
|||
5
D3O
11.05.12
✎
12:07
|
Создать СписокЗначений, загрузить в него первый массив (как вариант массив с большим количеством элементов), в цикле по другому массиву добавить в Список его значения, отсортировать Список, выгрузить в новый массив
|
|||
6
МихаилМ
11.05.12
✎
12:09
|
ищите по "сортировка слиянием"
|
|||
7
Buster007
11.05.12
✎
12:09
|
интересно, что им непонятно?
Есть 2 массива, например: 1ый 1 4 5 7 2ой 3 10 15 требуется за 1 цикл создать массив 1 3 4 5 7 10 15 СписокЗначений, ТЗ и т.д. использовать запрещается. |
|||
8
Feanor
11.05.12
✎
12:10
|
(7) а вот и работодатели подтянулись)
|
|||
9
Простенький вопросик
11.05.12
✎
12:11
|
Ну это что-то типа квалификационной задачи. Я подозреваю, что функцию сортировки нельзя использовать, так как это еще один цикл. Я немного недописал условие. Там еще есть уточнение. Цикл должен быть вида "для х=1 по a+b цикл" где а и b - размеры массивов.
|
|||
10
МишКа
11.05.12
✎
12:11
|
(0)
и=1; й=1; пока и<=РазмерПервогоМассива или й<=РазмерВторогоМассива цикл //здесь очевидно что делать конеццикла; |
|||
11
МишКа
11.05.12
✎
12:12
|
(9) Извращенцы они. Плюнь.
|
|||
12
Простенький вопросик
11.05.12
✎
12:13
|
(7)
ага, примерно так. Как бы еще это сделать? |
|||
13
155153144627
11.05.12
✎
12:13
|
||||
14
azernot
11.05.12
✎
12:14
|
М1 = Новый Массив;
М2 = Новый Массив; М3 = Новый Массив; //Новый массив Б = 0; Для А = 0 по Макс(М1.Количество(), М2.Количество()) Цикл Если А > М1.Количество() Тогда М3[Б] = М2[А]; Б = Б+1; ИначеЕсли А > М2.Количество() М3[Б] = М1[А]; Иначе Если М1[А] < М2[А] ТОгда М3[Б] = М1[А]; Б = Б+1; М3[Б] = М2[А]; Б = Б+1; Иначе М3[Б] = М2[А]; Б = Б+1; М3[Б] = М1[А]; Б = Б+1; КонецЕсли; КонецЕсли; КонецЦикла; |
|||
15
Ненавижу 1С
гуру
11.05.12
✎
12:14
|
РазмерА=А.Количество();
РазмерБ=Б.Количество(); йА=0; йБ=0; М = Новый Массив; Пока йА<РазмерА или йБ<РазмерБ Цикл Если йБ=РазмерБ Тогда БеремА=Истина; ИначеЕсли йА=РазмерА Тогда БеремА=Ложь; Иначе БеремА = (А[йА]<Б[йБ]); КонецЕсли; Если БеремА Тогда Х=А[йА]; йА=йА+1; Иначе Х=А[йБ]; йБ=йБ+1; КонецЕсли; М.Добавить(Х); КонецЦикла; |
|||
16
МишКа
11.05.12
✎
12:19
|
(14) Неправильно.
|
|||
17
МишКа
11.05.12
✎
12:20
|
(15) Правильно.
|
|||
18
azernot
11.05.12
✎
12:20
|
(16) А ну да, ступил :)
|
|||
19
Cube
11.05.12
✎
12:21
|
Сч1 = 1;
Сч2 = 1; Количество1 = Массив1.Количество(); Количество2 = Массив2.Количество(); ОбщееКоличество = Количество1 + Количество2; НовыйМассив = Новый Массив; Для Сч = 1 По ОбщееКоличество Цикл Если Сч1 <= Сч И Сч2 <= Сч Тогда Значение1 = Массив1[Сч1-1]; Значение2 = Массив2[Сч2-1]; Если Значение1 < Значение2 Тогда НовыйМассив.Добавить(Значение1); Сч1 = Сч1 + 1; Иначе НовыйМассив.Добавить(Значение2); Сч2 = Сч2 + 1; КонецЕсли; ИначеЕсли Сч1 <= Сч Тогда НовыйМассив.Добавить(Значение1); Сч1 = Сч1 + 1; Иначе НовыйМассив.Добавить(Значение2); Сч2 = Сч2 + 1; КонецЕсли; КонецЦикла; |
|||
20
mrDru
11.05.12
✎
12:22
|
мои 5 копеек:
КурсорА = 0; КурсорБ = 0; МассивА = Новый Массив; МассивБ = Новый Массив; МассивИтог = Новый Массив; МассивА.Добавить(1); МассивА.Добавить(11); МассивА.Добавить(12); МассивА.Добавить(111); МассивА.Добавить(112); МассивА.Добавить(1111); МассивА.Добавить(3112); МассивБ.Добавить(2); МассивБ.Добавить(21); МассивБ.Добавить(22); МассивБ.Добавить(211); МассивБ.Добавить(212); МассивБ.Добавить(2111); Пока МассивА.Количество() > КурсорА ИЛИ МассивБ.Количество() > КурсорБ Цикл Если МассивА.Количество() = КурсорА Тогда МассивИтог.Добавить(МассивБ[КурсорБ]); КурсорБ = КурсорБ + 1; ИначеЕсли МассивБ.Количество() = КурсорБ Тогда МассивИтог.Добавить(МассивА[КурсорА]); КурсорА = КурсорА + 1; Иначе Если МассивА[КурсорА] > МассивБ[КурсорБ] Тогда МассивИтог.Добавить(МассивБ[КурсорБ]); КурсорБ = КурсорБ + 1; Иначе МассивИтог.Добавить(МассивА[КурсорА]); КурсорА = КурсорА + 1; КонецЕсли; КонецЕсли; Сообщить(МассивИтог[МассивИтог.Количество() - 1]); КонецЦикла; |
|||
21
Простенький вопросик
11.05.12
✎
12:26
|
(15)
спасибо, быстро соображаешь |
|||
22
Нуф-Нуф
11.05.12
✎
12:30
|
очередной кандидат решает тестовое задание при помощи коллективного разума?
остальные то задачи решил? |
|||
23
Простенький вопросик
11.05.12
✎
12:31
|
(22)
2/3 решил, еще несколько осталось, может выложу попозже |
|||
24
experimentator76
11.05.12
✎
13:17
|
(0) делал такую ради интереса для одной компании
чем они там занимаются мне осталось неизвестно ) |
|||
25
experimentator76
11.05.12
✎
13:18
|
как бы непонятен смысл ее выполнения ЗА ТС
ему от этого легче работать там не станет |
|||
26
experimentator76
11.05.12
✎
13:19
|
(7) позабористее давай задачки ))
|
|||
27
NS
11.05.12
✎
13:21
|
(15) Обычно для ускорения из основного цикла доп. проверку на конецы массивов убирают, и выходят из цикла после достижения конца одного из массивов.
А дальше доливают оставшийся массив. |
|||
28
NS
11.05.12
✎
13:25
|
Хотя тут предсказание переходов неважно, так что пофиг.
|
|||
29
hhhh
11.05.12
✎
13:28
|
(25) как раз прямой смысл. Если умеет работать с мистой, значит и там ему легко будет работать.
|
|||
30
experimentator76
11.05.12
✎
13:28
|
была немного другая задачка
//Дано два массива А[а] и В[b] (а и b – количества элементов массивов), упорядоченных по возрастанию. //Написать алгоритм, выдающий значения обоих массивов в порядке убывания за один цикл [code] // исходные данные масА = ...; масВ = ...; // сообщаем значения массивов в порядке убывания за один цикл а = масА.Количество() - 1; в = масВ.Количество() - 1; мСчетчик = масА.Количество() + масВ.Количество(); Пока мСчетчик > 0 Цикл Если а < 0 Тогда Сообщить("В: " + масВ[в]); в = в - 1; ИначеЕсли в < 0 Тогда Сообщить("А: " + масА[а]); а = а - 1; ИначеЕсли (масА[а] > масВ[в]) Тогда Сообщить("А: " + масА[а]); а = а - 1; ИначеЕсли (масА[а] < масВ[в]) Тогда Сообщить("В: " + масВ[в]); в = в - 1; Иначе Сообщить("А: " + масА[а]); а = а - 1; Сообщить("В: " + масВ[в]); в = в - 1; мСчетчик = мСчетчик - 1; КонецЕсли; мСчетчик = мСчетчик - 1; КонецЦикла; [/code] |
|||
31
Mikeware
11.05.12
✎
13:30
|
(29) типа, "тупой, но спросит"?
|
|||
32
Ненавижу 1С
гуру
11.05.12
✎
13:30
|
(27) писано "на коленке", прямо в браузере
|
|||
33
experimentator76
11.05.12
✎
13:32
|
(32) на отладку должно уходить 80% времени ))
|
|||
34
experimentator76
11.05.12
✎
13:33
|
(29) мистаболы везде сгодятся ))
Маня же на логан заработал |
|||
35
hhhh
11.05.12
✎
13:34
|
(27) тогда нарушится условие - будет два цикла. А автору надо за один цикл.
|
|||
36
ХочуСказать
11.05.12
✎
13:40
|
(35) обычно говорят о количестве проходов
|
|||
37
Простенький вопросик
11.05.12
✎
13:42
|
(15) всетак чето не так. Смотри, я дописал код...
А = Новый Массив (3); Б = Новый Массив (3); А[0]=1; А[1]=2; А[2]=3; Б[0]=2; Б[1]=4; Б[2]=5; РазмерА=А.Количество(); РазмерБ=Б.Количество(); йА=0; йБ=0; М = Новый Массив; Пока йА<РазмерА или йБ<РазмерБ Цикл Если йБ=РазмерБ Тогда БеремА=Истина; ИначеЕсли йА=РазмерА Тогда БеремА=Ложь; Иначе БеремА = (А[йА]<Б[йБ]); КонецЕсли; Если БеремА Тогда Х=А[йА]; йА=йА+1; Иначе Х=А[йБ]; йБ=йБ+1; КонецЕсли; М.Добавить(Х); КонецЦикла; сообщить(М[0]); сообщить(М[1]); сообщить(М[2]); сообщить(М[3]); сообщить(М[4]); сообщить(М[5]); В итоге получается 1 1 2 3 2 3 |
|||
38
z_d_v
11.05.12
✎
13:46
|
(37) наверное не хватает проверки на одинаковае значения в массивах
|
|||
39
Reset
11.05.12
✎
13:47
|
(37)
Там опечатка, лентяй. Х=А[йБ]; на Х=Б[йБ]; поменяй |
|||
40
Простенький вопросик
11.05.12
✎
13:47
|
а вот (30) правильно работает, хотя и наоборот
|
|||
41
Ненавижу 1С
гуру
11.05.12
✎
13:48
|
//опечатался я в (15), надо так:
Если БеремА Тогда Х=А[йА]; йА=йА+1; Иначе Х=Б[йБ]; йБ=йБ+1; КонецЕсли; |
|||
42
Reset
11.05.12
✎
13:49
|
Если массив "Б" назвать массивом "У", текст ставится оригинальней.
|
|||
43
experimentator76
11.05.12
✎
13:50
|
(40) ну вот немного напряги мозги и переделай чтобы сортировало в нужную сторону )
|
|||
44
experimentator76
11.05.12
✎
13:51
|
(0) когда возьмут - а по законам Вселенной именно тебя и возьмут))
напиши на мисту как работается и все тако |
|||
45
Простенький вопросик
11.05.12
✎
13:51
|
(41)
а так все верно, еще раз спасибо |
|||
46
dmpl
11.05.12
✎
13:53
|
(0) Все просто. Решишь эту задачу - будешь кодером. Докажешь, что эту задачу решать не надо - будешь руководителем проекта/ведущим программистом.
|
|||
47
pumbaEO
11.05.12
✎
13:54
|
(46) + 1 докажешь, что эту задачу надо решать, будешь консультантом.
|
|||
48
experimentator76
11.05.12
✎
13:55
|
+(46) докажешь что за эту задачу должны заплатить - станешь Маней )
|
|||
49
Простенький вопросик
11.05.12
✎
13:55
|
(46)
а если решу эту задачу через мисту? |
|||
50
experimentator76
11.05.12
✎
13:57
|
(46) на Ведущего надо доказать что массивы должны быть отсортированы в другую сторону
|
|||
51
experimentator76
11.05.12
✎
13:58
|
(49) этот вопрос ты задай работодателю )
|
|||
52
experimentator76
11.05.12
✎
13:59
|
у тебя основная задача изменить код до неузнаваемости - вместо переменных юзай УИД
|
|||
53
_Atilla
14.05.12
✎
19:33
|
(0) Оба массива запихни в бинарное дерево. Потом читай методом LDR или RDL.
Тогда тебе не важно, сортированны были массивы или не сортированны |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |