Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 02.04.2009, 20:41
prasvit prasvit вне форума
Прохожий
 
Регистрация: 04.02.2009
Сообщения: 13
Репутация: 10
По умолчанию массив сл чисел , с заданной суммой элементов

Помогите, пожалуйста! Нужно создать одномерный массив, 20 значений, заполненный случайнымми числами, с выполнением условия, чтоб сумма элементов была равна 1200. массив не может содержать нули, значения могут повторяться. Как создать массив и заполнить я знаю, подскажите хотя бы алгоритм
Ответить с цитированием
  #2  
Старый 02.04.2009, 20:51
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,036
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Генерируешь 19 чисел случайным образом, а 20-е высчитываешь как 1200 - сумма первых 19-ти. Все. При вычислении 20-го проверяешь, что если оно равно 0, то, соответсвенно, отнимаешь 1 от 19-го и 20-е ставишь в 1.
Сама генерация - с помощью функции Random^

A[i] := Random(100) + 1; // +1 - что бы гарантированно <> 0.
Ответить с цитированием
  #3  
Старый 02.04.2009, 20:57
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Цитата:
Сообщение от lmikle
Генерируешь 19 чисел случайным образом, а 20-е высчитываешь как 1200 - сумма первых 19-ти. Все. При вычислении 20-го проверяешь, что если оно равно 0, то, соответсвенно, отнимаешь 1 от 19-го и 20-е ставишь в 1.
Сама генерация - с помощью функции Random^

A[i] := Random(100) + 1; // +1 - что бы гарантированно <> 0.
А если сумма 1-х двух случайно сгенерированных чисел уже больше 1200 ?
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #4  
Старый 02.04.2009, 21:15
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

Цитата:
Сообщение от Страдалецъ
А если сумма 1-х двух случайно сгенерированных чисел уже больше 1200 ?
фигню сказал. как может (даже если сгенерировались максимальные значения) 100+100>1200?
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj

Последний раз редактировалось PhoeniX, 03.04.2009 в 22:00.
Ответить с цитированием
  #5  
Старый 02.04.2009, 21:25
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,036
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Читай внимательно - 20 чисел! Итого 20 * 100 = 2000 > 1200!!!
Ответить с цитированием
  #6  
Старый 02.04.2009, 21:47
prasvit prasvit вне форума
Прохожий
 
Регистрация: 04.02.2009
Сообщения: 13
Репутация: 10
По умолчанию

я сделал!!!!

a[1]:=random(1200-19)+1; //макс элемент, остальные могут быть только единицы
sum:=a[1];
b:=(1200-19)+1-a[1];
for i:=2 to 19 do
begin
a[i]:=random(b)+1;
b:=b+1-a[i];
sum:=sum+a[i];
end;
a[20]:=1200-sum;
Ответить с цитированием
  #7  
Старый 02.04.2009, 22:32
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Цитата:
Сообщение от popyurv
Страдалецъ
фигню сказал. как может (даже если сгенерировались максимальные значения) 100+100>1200?
Почему-же фигню. В условии задачи неограничивается диапазон генерируемых значений. Это может быть и дробное число и больше 2000.
Вполне допустима ситуация когда будет сгенерирован ряд начинающийся с 1999,2 в итоге на втором элементе имеем переполнение. С чего появилась цифра 100 в вашем примере мне непонятно.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #8  
Старый 02.04.2009, 21:10
prasvit prasvit вне форума
Прохожий
 
Регистрация: 04.02.2009
Сообщения: 13
Репутация: 10
По умолчанию

причем числа не могут быть отрицательными
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 17:10.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter