массив с n элементами с отличием на 2

Статус
В этой теме нельзя размещать новые ответы.

Cannabis69

Постоялец
Регистрация
26 Июн 2007
Сообщения
66
Реакции
4
нужно сделать чтобы создавался массив с N кол-вом элементов(их количество указывается в переменной), и чтобы каждый из элементов отличался ото-всех минимум 2. Сделал для 2х элементов, помогите сделать для N элементов
Код:
		do {
			$random[1] = rand(1,$col-1);
			$random[2] = rand(1,$col-1);
		}
		while ((($random[1]-$random[2])<2) and (($random[2]-$random[1])<2));
 
PHP:
<?php
$count = 10; // количество элементов в массиве.
for ($i = 0; $i < $count; $i++) {
	$random[] = rand(1, 99999);
}
print_r($random);
?>

Все значения друг от друга, будут разнится друг от друга минимум на 2) По теории вероятности, процент следования друг за другом будет очень мелкий.

А вообще условие непонятное, очень много неясностей.
 
PHP:
<?php
$count = 10; // количество элементов в массиве.
for ($i = 0; $i < $count; $i++) {
    $random[] = rand(1, 99999);
}
print_r($random);
?>

Все значения друг от друга, будут разнится друг от друга минимум на 2) По теории вероятности, процент следования друг за другом будет очень мелкий.

А вообще условие непонятное, очень много неясностей.
Если это домашнее задание, то лучше сделать так, чтобы не придерались:
PHP:
$count = 10; // количество элементов в массиве. 
$random = array();
for ($i = 0; $i < $count; $i++) { 
 $num=  @max($random)+ rand(2, 99999);
    $random[] = $num; 
}
 
это не то, поставил рандом от 1 до 30 скрипт выдал
Код:
Array ( [0] => 25 [1] => 18 [2] => 27 [3] => 25 [4] => 6 [5] => 30 [6] => 6 [7] => 29 [8] => 13 [9] => 10 )
то есть, некоторые различаются менее чем на 2, некоторые даже одинаковые. :(
рандом мне нужен не из больших чисел, а чисел 40 в среднем, так что не подходит
PHP:
<?php
$count = 10; // количество элементов в массиве.
for ($i = 0; $i < $count; $i++) {
	$random[] = rand(1, 99999);
}
print_r($random);
?>
Все значения друг от друга, будут разнится друг от друга минимум на 2) По теории вероятности, процент следования друг за другом будет очень мелкий.
А вообще условие непонятное, очень много неясностей.
 
Cannabis69,
Если вы взяли тот код что вам дал KillDead то у вас немогу получиться такой масив. Так как в этом примере кажый следующий элемент будет бльше предыдущего максималоного минимум на 2.
Или вас такое тоже не катит чтобы каждый следующий был бльше максимального?
да в его примере можно заменить
rand(2, 99999); на rand(2, 10); например тогда следующий будет больше предыдущего на (2-10) значений
 
рандом мне нужен не из больших чисел, а чисел 40 в среднем, так что не подходит
Ну, а почему этого нельзя сразу сказать? Потом напишешь, что цифры должны идти по порядку, и не должны превышать в расстоянии больше 5 и т.д.
Давайте жить дружно и говорить конкретней =)


Как тебе такой вариант:

PHP:
<?php
$count = 10;
for ($i = 0, $j = 1; $i < $count; $i++) {
	$j = $j + rand(2, 8);
	$random[] = $j;
}
shuffle($random);
print_r($random);
?>
 
хорошо, будем жить дружно, вот весь скрипт:
Код:
<?
$col_keys = "4";
$text_key = "КЕЙ";
$prom = "2";
$s="тут написан какой-то определенный текст в котором должны вставляться ключи в количестве $col_keys через промежуток не менее $prom слова";
$nl = explode(" ", $s);
$col = count ($nl);
		do {
			$random[1] = rand(1,$col-1);
			$random[2] = rand(1,$col-1);
			$raz = $random[1]-$random[2];
			echo $raz;
		}
		while ((($random[1]-$random[2])<2) and (($random[2]-$random[1])<2));
	for ($i = 1; $i < $col; $i++)
	{
			for ($n = 1; $n < $col_keys; $n++) {
				if ($i==$random[$n]) {
				echo "<b>".$text_key."</b> ";
				}
			} 
		echo $nl[$i]." ";  
	}
?>
он делит текст на слова, и должен вставлять кеи через установленный промежуток и в установленных количествах.

напомню, что я сделал чтобы он работал с 2мя кеями, но как сделать чтобы кеев можно было расставлять и 1, и 5 и 10, в зависимости от настройки? :ah:
 
Держи

PHP:
<?php
$count_keys = '4';
$keyword    = 'КЕЙ';
$go         = '2';
$text       ='тут написан какой-то определенный текст в котором должны вставляться ключи в количестве $col_keys через промежуток не менее $prom слова';
$words      = explode(' ', $text);

$count = 0;
for ($i = 0, $size = sizeof($words); $i < $size; $i+=$go) {
	if ($count == $count_keys) {
		break;
	}
	$words[$i] = $words[$i].' '.$keyword;
	$count++;
}
$text = implode(' ', $words);
echo($text);
?>


p.s. имхо неудобно будет тебе каждый раз телепать параметр
PHP:
$go
чтобы равномерно распределить кей по тексту.
Гораздо проще былобы ,чтобы скрипт сам определял через сколько промежутков надо сувать кей, чтобы получился текст с равномерно-распределенным кеем. Ну как в обычных доргенах, задаешь процент и задаешь кей ,а скрипт сам вставляет.
 
почти то, 1 но - кей должен вставляться в случайных местах, как у меня в примере, вовсе ненужно чтобы он вставлялся через каждые 2 слова, нужно чтобы всатвлялись через 2+ слов случайным образом.
 
Тогда вот так
PHP:
<?php
$count_keys = '4';
$keyword    = 'КЕЙ';
$go         = '2';
$text       ='тут написан какой-то определенный текст в котором должны вставляться ключи в количестве $col_keys через промежуток не менее $prom слова';
$words      = explode(' ', $text);

$count = 0;
for ($i = 0, $size = sizeof($words); $i < $size;) {
	$i += rand($go, 3);
	if ($count == $count_keys) {
		break;
	}
	$words[$i] = $words[$i].' '.$keyword;
	$count++;
}
$text = implode(' ', $words);
echo($text);
?>

Идет рандом от параметра $go до 8

PHP:
$i += rand($go, 3);
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху