Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2002.06.03;
Скачать: [xml.tar.bz2];

Вниз

Раз все предлагают задачи, попробую и я.   Найти похожие ветки 

 
blackweber   (2002-04-23 21:25) [0]

Заполнить массив из N элементов не повторяющимися числами от 1 до N.
У меня что-то не получается:

var a:array[1..24] of integer;
z,x,c:integer;
begin
randomize;
repeat
inc(z);
x:=random(36);
a[z]:=x;
for c:=1 to z do
begin
if a[c]=x then z:=c;
end;
writeln(z," ",a[z]);
until z>23;
readln;
end.


 
Doom   (2002-04-23 21:32) [1]

Такая задачка уже была в основной конфе неделю назад
Только там от 1 до 10 числа были но разница небольшая


 
UDS   (2002-04-23 21:33) [2]

RANDOMIZE;
FOR I:=1 TO 7 DO
A[I]:=I; // создаем массив и заполняем его
// числами от 1 до 7 по порядку

Точно это я вопрос задавал. Иответ был генитально прост:
For i := 1 To 7 do begin // для каждой ячейки массива
j := a[i]; // делаем переменную j равной
// значению в этой ячейке

t := Random(7)+1; // переменной t присваиваем
// cлуч. число от 1 до 7
a[i] := a[t]; a[t] := j; // затем этой ячейке присваивается
end; // значение ячейки с номером t,
// а ячейке с номером t, то чему равна j.


 
Oleg_Gashev   (2002-04-23 21:42) [3]

Xi+1 = (Xi + a) mod n,
где HOD(a,n)=1


 
blackweber   (2002-04-23 22:54) [4]

>Oleg_Gashev
Может я чего-то не понял, но надо случайными числами.


 
VuDZ   (2002-04-23 23:03) [5]


int n = 10;
int ar[10];
int temp = 0;

for (int i = 0; i < n; ++i){
temp = rand() % n;
for (int j = 0; j < i; ++j)
if (ar[j] == temp)
break;
j == i ? ar[i] = temp : i--;
}


 
blackweber   (2002-04-23 23:34) [6]

>VuDZ
Лучше на Delphi, а то Ц вообще только на интуитивном уровне.


 
VuDZ   (2002-04-23 23:55) [7]

а там ничего сложношл и нет:
1. выбераем случайное число от 0 до N
2. просматриваем массив от 0 до текущего значения i в поисках данного числа
3. если его нет, то добавляем, иначе уменьшаем счётчик цмкла на 1, и продолжаем пок ане наступит полная фиеста :>


 
Di_wind   (2002-04-24 00:46) [8]

2 VuDZ ага и если числа от 1 до 100, и у тебя останется не найдено,к примеру 66, то рандом(100) будет эти 66 будет с таким тормозом искать....


 
VuDZ   (2002-04-24 01:04) [9]

ну и что? :>
можно сделать проще - список с числами длинной в N. Выбераем случайное число i. Если i > N, берём последнее число. А использованный элемент удаляем, т.к. у нас список типа такого:

struct _Node{
int nValue;
_Node * next;
}

и всё заполниться за N проходов... только код получитьс больше


 
MBo   (2002-04-24 06:31) [10]

randomize;
for i:=1 to n do
list.add(pointer(i));
for i:=1 to n do begin
j:=random(list.count);
a[i]:=integer(list[j]);
list.delete(j);
end;
реализация этого принципа может быть и другой.
без использования доп. структур - заполняем массив, потом делаем
порядка n перестановок элементов на случайных местах.


 
VictorT   (2002-04-24 11:42) [11]


> blackweber © (23.04.02 21:25)

Заведи себе привычку выделять отступами структуру программы, а то потом самому в своих исходниках трудно разобратся будет.


 
blackweber   (2002-04-24 21:26) [12]

> VictorT

Я имею такую привычку, но здесь не поддерживается выделение ((((


Спасибо всем, разобрался:


uses crt;
var a:array[1..24] of integer;
z,x,y:integer;
begin
clrscr;
randomize;
for z:=1 to 24 do a[z]:=z;
for z:=1 to 24 do begin
x:=a[z];
y:=random(24)+1; // Не понимаю почему если 1 не прибавить
a[z]:=a[y]; // получаем ерунду. Да и что-то не догоняю
a[y]:=x; // почему в результате таких махинаций числа
end; // в массиве дейсвительно не совпадают?
for z:=1 to 24 do writeln(a[z]);
readln;
end.



Страницы: 1 вся ветка

Форум: "Потрепаться";
Текущий архив: 2002.06.03;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.006 c
1-7011
Kordel
2002-05-22 12:32
2002.06.03
Завершение программы


7-7248
Nazya
2002-03-07 14:14
2002.06.03
Мастера помогите ! Мне нужно написать сервис


1-7080
onix
2002-05-22 09:17
2002.06.03
Что то не ладится с TRegistry.Посмотрите пожалуйста где заковыка


1-7075
Chief
2002-05-21 09:52
2002.06.03
ссылки mailto


3-6884
konorl
2002-05-08 05:49
2002.06.03
Упаковка Paradox





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский