Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.90/20: Рейтинг темы: голосов - 20, средняя оценка - 4.90
 Аватар для Yakunin_Yura
31 / 25 / 7
Регистрация: 28.07.2016
Сообщений: 895

Как в задаче с рандомом отсеять повторяющиеся?

23.11.2018, 20:11. Показов 4317. Ответов 25
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть задачка:
"Вывести 3 случайных числа от 0 до 100 без повторений."

Как бы это так сделать без повторений? Помогите с алгоритмом.

так:
PHP
1
2
3
4
5
6
7
$i = 0;
do {
    $arr[$i] = rand(0, 100);
echo $arr[$i].'<br>';
    $i++;
        if ($arr[$i] = $arr[$i-1]) continue;
} while ($i < 3);
не пойдёт, потому что тогда на этой строчке
PHP
1
        if ($arr[$i] = $arr[$i-1]) continue;
ещё не будет определён $arr[$i].

Добавлено через 4 минуты
так:
PHP
1
2
        if ($arr[$i+1] = $arr[$i]) continue;
    $i++;
тоже не пойдёт.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
23.11.2018, 20:11
Ответы с готовыми решениями:

Отсеять при вводе повторяющиеся цифры
Задание: Организовать массив, содержащий 20 различных целых чисел. Десять первых элементов массива упорядочить по возрастанию, а десять...

Как отсеять ip-v4 из IPAddress
дело в том, что Dns.GetHostAddresses загоняет в IPAddress сначала ipv6, а потом для того же подключения ipv4. если на компе одно сетевое...

Как отсеять дублировки?
Здравствуйте! Проще привести конкретный пример: делается запрос &quot;Иванов&quot; по полю &quot;фамилия&quot;. Требуется найти только те записи, в...

25
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,912
23.11.2018, 21:23
Лучший ответ Сообщение было отмечено Jewbacabra как решение

Решение

PHP
1
2
3
4
5
6
7
8
9
10
11
12
<?php
$nums = [];
 
while(count($nums) < 3)
{
    $num = rand(0, 100);
    
    if(!in_array($num, $nums))
        $nums[] = $num;
}
 
var_dump($nums);
2
 Аватар для Строитель
1084 / 746 / 364
Регистрация: 09.07.2018
Сообщений: 1,760
23.11.2018, 21:44
PHP
1
2
3
4
5
$nums = range(0, 100);
shuffle($nums);
$nums = array_slice($nums, 0, 3);
 
var_dump($nums);
3
 Аватар для Yakunin_Yura
31 / 25 / 7
Регистрация: 28.07.2016
Сообщений: 895
24.11.2018, 20:29  [ТС]
VNIIAEN, а повторяющиеся в таком случае разве будут отсеяны?

Добавлено через 4 минуты
а хотя да просто сразу не понял что делает range()
0
 Аватар для Строитель
1084 / 746 / 364
Регистрация: 09.07.2018
Сообщений: 1,760
24.11.2018, 20:52
Yakunin_Yura, можно немного модернизировать код
PHP
1
2
3
4
5
$nums = range(0, 100);
shuffle($nums);
$nums = array_slice($nums, rand(0, 97), 3);
 
var_dump($nums);
0
1152 / 554 / 320
Регистрация: 21.06.2012
Сообщений: 1,854
25.11.2018, 12:29
Цитата Сообщение от VNIIAEN Посмотреть сообщение
$nums = range(0, 100);
если захотим увеличить диапазон до 9 значений, то придётся лезть в настройки php
0
 Аватар для Строитель
1084 / 746 / 364
Регистрация: 09.07.2018
Сообщений: 1,760
25.11.2018, 14:18
sasha0012, не понял сути вашего поста - если не сложно, разложите его подробнее​.
0
 Аватар для Пифагор
2172 / 1655 / 840
Регистрация: 10.01.2015
Сообщений: 5,207
25.11.2018, 14:19
sasha0012, а причем тут увеличение диапазона значений??? Для данного задания это не важно. Четко написано
Цитата Сообщение от Yakunin_Yura Посмотреть сообщение
от 0 до 100
1
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
25.11.2018, 14:23
Цитата Сообщение от Пифагор Посмотреть сообщение
а причем тут увеличение диапазона значений??? Для данного задания это не важно. Четко написано
Одно из свойств алгоритма - универсальность, т.е возможность приминения к различному набору исходных данных. Очевидно, что даже для 100 значение, не говоря уже о большем диапозоне, мягко говоря не оптимально создавать в памяти все возможные значения, а потом их еще и перемешивать.
2
 Аватар для Строитель
1084 / 746 / 364
Регистрация: 09.07.2018
Сообщений: 1,760
25.11.2018, 14:25
Jewbacabra, а как вы видите решение? )
0
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
25.11.2018, 14:31
Цитата Сообщение от VNIIAEN Посмотреть сообщение
а как вы видите решение? )
Как в задаче с рандомом отсеять повторяющиеся?
0
 Аватар для Пифагор
2172 / 1655 / 840
Регистрация: 10.01.2015
Сообщений: 5,207
25.11.2018, 14:34
VNIIAEN, подозреваю, что уважаемый Jewbacabra видит решение только так, как его видит Jodah, и никак иначе.

Добавлено через 1 минуту
Лично мне причина такой предвзятости не ясна.
1
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
25.11.2018, 14:37
Пифагор, никакой предвзятости нет. Ответ VNIIAEN является решением, но на лучший не тянет, выше я объяснил почему
0
 Аватар для Пифагор
2172 / 1655 / 840
Регистрация: 10.01.2015
Сообщений: 5,207
25.11.2018, 14:57
Jewbacabra, тогда ответьте: для чего в языке реализовано множество функций, когда, по большому счету, 95% всех задач можно реализовать с помощью циклов? Уж не для удобства ли???
0
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
25.11.2018, 14:59
Пифагор, в каких-то случаях приминение этих функций оправданно и не несет значительных накладных расходов, а в каких-то нет.
PS хотелось бы аргументы по существу вопроса, без демагогии
0
1152 / 554 / 320
Регистрация: 21.06.2012
Сообщений: 1,854
25.11.2018, 15:34
Цитата Сообщение от Пифагор Посмотреть сообщение
sasha0012, а причем тут увеличение диапазона значений??? Для данного задания это не важно. Четко написано
дело в том что на эту тему может наткнуться любой другой программист с похожим вопросом. Второе решение может показаться проще, но оно скрывает в себе деталь которая не очевидна на первый взгляд. А бедняга разработчик даже не будет подозревать кто-же сжирает ему всю память на серваке.
0
 Аватар для Строитель
1084 / 746 / 364
Регистрация: 09.07.2018
Сообщений: 1,760
25.11.2018, 16:04
sasha0012, на счёт памяти - там же исходный массив перезаписывается массивом из 3х элементов.
0
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
25.11.2018, 16:10
Цитата Сообщение от VNIIAEN Посмотреть сообщение
на счёт памяти - там же исходный массив перезаписывается массивом из 3х элементов.
но он же существует какое-то время. И будет удален только при срабатывании сборщика мусора
0
 Аватар для Строитель
1084 / 746 / 364
Регистрация: 09.07.2018
Сообщений: 1,760
25.11.2018, 16:55
Jewbacabra, разве он сохраняет свой объем после перезаписи?? Был массив размером в 100 элементов, просуществовал он в таком виде до момента перезаписи массивом из 3х элементов - где будут храниться остальные 97м элементов исходного массива?
0
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
25.11.2018, 17:05
Цитата Сообщение от VNIIAEN Посмотреть сообщение
Был массив размером в 100 элементов, просуществовал он в таком виде до момента перезаписи массивом из 3х элементов - где будут храниться остальные 97м элементов исходного массива?
Никакой перезаписи нет. Будет 2 массива - 1 на 100 элементов и другой на 3. Когда чмсло ссылок на массив из 100 элементов станет 0, то память используемая под него освободится. Т.е. будет такой момент, когда в памяти одновременно хранится 2 массива, хоть и не долго
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.11.2018, 17:05
Помогаю со студенческими работами здесь

Как отсеять несуществующие товары?
Всем привет. Аналогичная проблема. Навыков в php мало, так что сам не справляюсь. Ссылки и имеют такой вид:...

Как отсеять вывод ipv6
Всех с прошедшими праздниками и удачи в новом году. Возник такой вопрос. Пишу небольшой скрипт для инвентаризации ПК и один из...

Ребят, подскажите, как отсеять лишнее
Есть исходный код страницы _http://game-bot.com/script?uid=4703259&amp;lvl_from=1&amp;lvl_to=25 Вот кусочек. &lt;div&gt;&lt;div...

Как отсеять дублированные значения в запросе?
Итак, у меня имеется таблица с полями Страна, город! Далее на другой форме имеется ComboBox который содержит в себе названия стран! Как...

Как отсеять не нужные мне поля в запросе
ВЫБРАТЬ РегистрПоКонтрагентамОбороты.Склад КАК Склад, РегистрПоКонтрагентамОбороты.Товар КАК Товар, ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru