Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Случайные числа 
:(
    Опции темы
Rondo
Дата 11.5.2006, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 154
Регистрация: 24.2.2006
Где: там..

Репутация: нет
Всего: нет



есть 4 случайных числа в диапозоне 1..9, как сделать чтобы они были случайными но их сумма была равна допустим 27?

например 
9981 = 27
6489= 27
 smile 
 
--------------------
Начинающий кодер  
PM MAIL ICQ   Вверх
_hunter
Дата 11.5.2006, 15:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 15
Всего: 98



создай массив таких чисел (сумма цифр в котором == 27) и выбирай число из этого массива.
 


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Yanis
Дата 11.5.2006, 15:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 72
Всего: 111



Вот Delphi то под рукой нету... 4 раза отнимай от 27 числа из диапозона от 1 до 9, к одному из 4-х чисел прибавить разность 27 и 4-х найденых... Вроде ничего не напутал smile 


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
Guedda
Дата 11.5.2006, 15:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Подрывник
****


Профиль
Группа: Завсегдатай
Сообщений: 3137
Регистрация: 27.12.2005
Где: Ростов-на-Дону

Репутация: 14
Всего: 78



Код

type
  Tmass = 1..9;

begin
  Randomize;
  a := random(TMass);
  b := random(TMass);
  c := random(TMass);
  d := random(TMass);
  if (a + b + c + d) = 27 then {твои операторы};
end;
 


--------------------
Ll 2
PM MAIL WWW ICQ Skype GTalk   Вверх
Ripper
Дата 11.5.2006, 16:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Lonely soul...
**


Профиль
Группа: Участник
Сообщений: 920
Регистрация: 30.6.2004
Где: г. Москва

Репутация: 1
Всего: 23



Код

var
a:array [0..3] of integer;
i,sum:integer;
begin
sum:=27;
randomize;
repeat
 for i:=0 to 3 do
  a[i]:=random(9);
   until ((a[0]+a[1]+a[2]+a[3])=sum) ;
end;


Типа того т.е. пока не будет равно 27 запомлять эти случайные числа
 


--------------------
"Он знает: надо смеяться над тем, что тебя мучит, иначе не сохранишь равновесия, иначе мир сведет тебя с ума" - Над кукушкиным гнездом
PM MAIL ICQ   Вверх
_hunter
Дата 11.5.2006, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 15
Всего: 98



а вас (обоих) не смущает то, что в худшем случае этот цикл несколько лет выполняться будет? 


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Alexeis
Дата 11.5.2006, 16:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



_hunter, код Ripper у меня сработал за несколько итераций!

Добавлено @ 16:19 
У Guedda, явно опечатка (даже не компилируется) 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Yanis
Дата 11.5.2006, 16:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 72
Всего: 111



Цитата(alexeis1 @  11.5.2006,  17:17 Найти цитируемый пост)
_hunter, код Ripper у меня сработал за несколько итераций!

Всё равно это не выход. Нужно генерировать, а не подбирать. 


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
Rondo
Дата 11.5.2006, 16:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 154
Регистрация: 24.2.2006
Где: там..

Репутация: нет
Всего: нет



Мне надо чтобы он сразу выкидывал числа суммой 27 smile 
--------------------
Начинающий кодер  
PM MAIL ICQ   Вверх
Yanis
Дата 11.5.2006, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 72
Всего: 111



Цитата(Rondo @  11.5.2006,  17:39 Найти цитируемый пост)
Мне надо чтобы он сразу выкидывал числа суммой 27

см. post 3 


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
_hunter
Дата 11.5.2006, 16:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 15
Всего: 98



alexeis1, -- повезло smile

Rondo, засунь код в функцию -- будет сразу выкидывать 


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Rondo
Дата 11.5.2006, 17:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 154
Регистрация: 24.2.2006
Где: там..

Репутация: нет
Всего: нет



Спасибо Yanis, твой способ помог  smile 
Вот что получилось:

Код

procedure TForm1.Button1Click(Sender: TObject);
const
  num = 27;
var
  a, b, c, d, sum, minus: integer;
begin
  randomize;
  a:= random(9);
  b:= random(9);
  c:= random(9);
  d:= random(9);
  sum:= a+b+c+d;
  minus:= num-sum;
  d:=d+minus;
  edit1.Text:= IntToStr(a)+' '+IntToStr(b)+' '+IntToStr(с)+' '+IntToStr(d);
  edit2.Text:= IntToStr(a+b+c+d);
end; 
   

Это сообщение отредактировал(а) Snowy - 11.5.2006, 17:39
--------------------
Начинающий кодер  
PM MAIL ICQ   Вверх
Snowy
Дата 11.5.2006, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Ндя. Способ не очень.
Так и вижу результат 1 + 1 + 1 + 24

Добавлено @ 17:42 
Даже простой перебор и то приличней.
Код

repeat 
  a:= random(9);    
  b:= random(9);    
  c:= random(9);    
  d:= random(9);
until a + b + c + d = 27;
 
PM MAIL   Вверх
Rondo
Дата 11.5.2006, 17:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 154
Регистрация: 24.2.2006
Где: там..

Репутация: нет
Всего: нет



Да, я только что хотел об этом спросить smile Как сделать чтобы последнее число (d) если >10 то оно как то распределилось в другие?  smile  
--------------------
Начинающий кодер  
PM MAIL ICQ   Вверх
Yanis
Дата 11.5.2006, 17:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 72
Всего: 111



Цитата(Snowy @  11.5.2006,  18:41 Найти цитируемый пост)
Так и вижу результат 1 + 1 + 1 + 24

А что этот вариант не подходит под условие? 


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
Rondo
Дата 11.5.2006, 17:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 154
Регистрация: 24.2.2006
Где: там..

Репутация: нет
Всего: нет



Нужен не перебор а ген.

Добавлено @ 17:57 
Цитата(Yanis @ 11.5.2006,  17:55)
Цитата(Snowy @  11.5.2006,  18:41 Найти цитируемый пост)
Так и вижу результат 1 + 1 + 1 + 24

А что этот вариант не подходит под условие?

Подходит! Считает все прально но надо как то число d разбросать по другим числам 
--------------------
Начинающий кодер  
PM MAIL ICQ   Вверх
Yanis
Дата 11.5.2006, 17:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 72
Всего: 111



а ну да  smile  


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
Yanis
Дата 11.5.2006, 18:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 72
Всего: 111



Можно построить таблицу со значениями. Всего лишь 216 значений при данных условях smile 


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
Rondo
Дата 11.5.2006, 18:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 154
Регистрация: 24.2.2006
Где: там..

Репутация: нет
Всего: нет



Может есть какието другие способы? 
--------------------
Начинающий кодер  
PM MAIL ICQ   Вверх
Yanis
Дата 11.5.2006, 18:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 72
Всего: 111



Цитата(Yanis @  11.5.2006,  19:32 Найти цитируемый пост)
построить таблицу со значениями
 


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
Ripper
Дата 11.5.2006, 20:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Lonely soul...
**


Профиль
Группа: Участник
Сообщений: 920
Регистрация: 30.6.2004
Где: г. Москва

Репутация: 1
Всего: 23



незнаю у меня все быстро вычислялось т.к. числа не большие и перебор идет быстро
 


--------------------
"Он знает: надо смеяться над тем, что тебя мучит, иначе не сохранишь равновесия, иначе мир сведет тебя с ума" - Над кукушкиным гнездом
PM MAIL ICQ   Вверх
Vit
Дата 11.5.2006, 20:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 48
Всего: 207



Так чуток побыстрее будет

Код

repeat 
  a:= random(9);    
  b:= random(9);    
  c:= random(9);    
until a + b + c >17;
d:=27-a-b-c;



 


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
Cheburek
Дата 12.5.2006, 00:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 74
Регистрация: 26.3.2006

Репутация: нет
Всего: 1



Код

type
nabor = record
      a,b,c,d:array[1..217] of integer;
end;
{....}
var my:nabor;

1 раз так
Код

procedure TForm1.Button1Click(Sender: TObject);
var i,j,m,n,k : integer;
begin
k := 1;
for i := 1 to 9 do begin 
    for j := 1 to 9 do begin
        for n := 1 to 9 do begin
            for m := 1 to 9 do begin
                if m+n+j+i = 27 then begin
                    my.a[k] := i;
                    my.b[k] := j;
                    my.c[k] := n;
                    my.d[k] := m;
                    k := k + 1;
                end;
            end;
        end;
    end;
end;
end;

а потом все время вот так
Код

Randomize;
k := random(217);
label1.Caption := inttostr(my.a[k]) + '  ' 
+ inttostr(my.b[k]) + '  ' 
+ inttostr(my.c[k]) + '  '
+ inttostr(my.d[k]) + '  ';


а вообще по условию самое нормальное...    

Это сообщение отредактировал(а) Cheburek - 12.5.2006, 00:50
PM MAIL   Вверх
Romikgy
Дата 12.5.2006, 09:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 26
Всего: 146



Код

procedure TForm1.Button1Click(Sender: TObject);
function sumdec(const x: longint): longint;
var t: longint;
begin
  t:=x;
  Result:=t mod 10;
  t:=t div 10;
  Result:= Result+ (t mod 10);
  t:=t div 10;
  Result:= Result+ (t mod 10);
  t:=t div 10;
  Result:= Result+ (t mod 10);
end;
var  sl: TStringList;
i: longint;
begin
 sl:=TStringList.Create;
 for i:=1000 to 9999 do
 begin
  if (sumdec(i)=27) then sl.Add(IntToStr(i));
 end;
 ListBox1.Items.Assign(sl);
 ListBox1.Items.Insert(0,IntToStr(sl.Count));
 sl.Free;
end;

Всего 219 таких комбинаций smile 
и потом можно по рандому выводить нужную строку из листбокса smile 


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Демо
Дата 12.5.2006, 09:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 3.11.2005

Репутация: 30
Всего: 50



Если одно число зависит от других, то оно не является случайным, что противоречит условиям задачи. 


--------------------
    
PM MAIL ICQ Skype   Вверх
Демо
Дата 12.5.2006, 10:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 3.11.2005

Репутация: 30
Всего: 50



Метод Guedda вполне подходит, и итераций достаточно немного для поиска:

Вот пара десятков решений этим методом, последнее число - количество итераций:

9    4    7    7    Ит:    42
9    2    8    8    Ит:    20
8    6    9    4    Ит:    2
8    9    5    5    Ит:    6
6    9    4    8    Ит:    11
5    7    9    6    Ит:    39
8    9    8    2    Ит:    49
7    9    8    3    Ит:    63
6    5    9    7    Ит:    37
9    8    3    7    Ит:    38
8    7    5    7    Ит:    13
8    7    8    4    Ит:    61
7    5    9    6    Ит:    16
9    5    7    6    Ит:    5
6    8    5    8    Ит:    8
6    6    7    8    Ит:    59
6    6    6    9    Ит:    3
7    7    7    6    Ит:    17
6    8    9    4    Ит:    7
7    8    6    6    Ит:    28
9    3    9    6    Ит:    41
7    9    7    4    Ит:    10
8    4    9    6    Ит:    46
9    8    8    2    Ит:    52
9    6    3    9    Ит:    56
9    7    6    5    Ит:    13
7    8    4    8    Ит:    3
4    9    7    7    Ит:    32
8    3    9    7    Ит:    12
7    8    8    4    Ит:    3
8    9    5    5    Ит:    10
8    4    9    6    Ит:    45
4    8    8    7    Ит:    16
7    7    8    5    Ит:    27
2    8    8    9    Ит:    2
4    7    7    9    Ит:    11
6    9    9    3    Ит:    24
1    8    9    9    Ит:    11
3    6    9    9    Ит:    61
6    6    8    7    Ит:    8
7    8    3    9    Ит:    1
6    6    7    8    Ит:    4
7    8    5    7    Ит:    10
6    9    6    6    Ит:    16
4    9    6    8    Ит:    25
7    6    8    6    Ит:    1
1    8    9    9    Ит:    10
7    9    7    4    Ит:    67
7    5    6    9    Ит:    31
9    4    8    6    Ит:    14
6    9    8    4    Ит:    58
9    7    9    2    Ит:    14
4    8    8    7    Ит:    20
9    6    7    5    Ит:    21
6    9    5    7    Ит:    2
8    2    9    8    Ит:    89
8    9    1    9    Ит:    8
2    9    9    7    Ит:    17
3    6    9    9    Ит:    32
9    9    7    2    Ит:    21
9    9    3    6    Ит:    32
7    9    9    2    Ит:    44
3    9    7    8    Ит:    12
5    7    6    9    Ит:    30
6    7    7    7    Ит:    4
5    9    4    9    Ит:    5
9    8    3    7    Ит:    29
 


--------------------
    
PM MAIL ICQ Skype   Вверх
Alexeis
Дата 12.5.2006, 10:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Демо, Полностью согласен вычитание портит "случайность"
Если вычитать так хоть выбирать чило из которого вычитаем произвольно или раскидывать вычитаемое число на всех(в смысле вычитать из каждого некоторое число чтоб сумма сохранялась) 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Guedda
Дата 12.5.2006, 10:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Подрывник
****


Профиль
Группа: Завсегдатай
Сообщений: 3137
Регистрация: 27.12.2005
Где: Ростов-на-Дону

Репутация: 14
Всего: 78



Цитата(Демо @  12.5.2006,  11:00 Найти цитируемый пост)
Метод Guedda вполне подходит

Хм... Ну тогда и пользоваться этим методом. 


--------------------
Ll 2
PM MAIL WWW ICQ Skype GTalk   Вверх
Alexeis
Дата 12.5.2006, 10:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Guedda, может для Демо и подходит но автор (Rondo) говорит, что ему этот способ не годится.
Цитата(Rondo @  11.5.2006,  16:56 Найти цитируемый пост)
Нужен не перебор а ген.

 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Guedda
Дата 12.5.2006, 11:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Подрывник
****


Профиль
Группа: Завсегдатай
Сообщений: 3137
Регистрация: 27.12.2005
Где: Ростов-на-Дону

Репутация: 14
Всего: 78



Хм... Так это как раз таки не перебор, а генерация случайных чисел... Функцией random... 


--------------------
Ll 2
PM MAIL WWW ICQ Skype GTalk   Вверх
Rondo
Дата 12.5.2006, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 154
Регистрация: 24.2.2006
Где: там..

Репутация: нет
Всего: нет



норма, я если че делаю пока такой... простенький key-gen  smile

Добавлено @ 13:13 
Хотя я его реализовал... но всетаки для себя интересно как все это делается smile 
--------------------
Начинающий кодер  
PM MAIL ICQ   Вверх
Страницы: (3) [Все] 1 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1625 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.