IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Одномерный массив
barlog
сообщение 23.10.2006 20:44
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 27
Пол: Мужской
Реальное имя: г

Репутация: -  0  +


Для данного одномерного массива укажите индексы тех его элементов, сумма которых равна заданному числу(если такие есть). Найдите все наборы элементов, удовлетворяющих условию задачи.
Помогите плиз! Чё то и с формулировкой не всё ясно мне. Буду благодарен любой помощи!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
volvo
сообщение 25.10.2006 23:52
Сообщение #2


Гость






Ну, например, вот такой вариант прекрасно отрабатывает на том примере, который я привел во втором посте:
var
n: integer;
print: boolean;

const
size = 6;
cSize = 100;
type
T = array[1 .. size] of integer;
cType = array[1 .. cSize] of smallint;

var
arr: T;
c: cType;

const
diapazon: set of byte = [];

function contains(myArray: T; const cArr: cType;
const len: integer; var indexes: T): boolean;
var
i, j: integer;
found: boolean;
index: integer;
begin

index := 0;

contains := false;
for i := 1 to len do begin

found := false;
for j := 1 to high(T) do
if myArray[j] = c[i] then begin
found := true;
myArray[j] := -1;
inc(index); indexes[index] := j;
break
end;

if not found then exit;
end;
contains := true;

end;

procedure find(num,k,len: smallint);
var
i: smallint;
indexes: T;
begin
if num=0 then begin
print := true;
for i := 1 to pred(len) do
if not (c[i] in diapazon) then print := false;

if print and (len <= size + 1) then begin

if contains(arr, c, len - 1, indexes) then begin
{ for i:=1 to len-1 do write(c[i],' '); writeln }
for i:=1 to len-1 do write(indexes[i]:3); writeln
end;

end;
end
else begin
for i:=1 to k do
if num-i>=0 then begin
c[len]:=i;
find(num-i,i,len+1);
end;
end;
end;

var i: integer;
begin
write('n = '); readln(n); { n := 6; }
for i := 1 to size do begin
write('arr[', i:2, '] = '); readln(arr[i]);
include(diapazon, arr[i]);
end;

find(n,n,1);
readln
end.
Вот так это выглядит:
Цитата(Console)
n = 16
arr[ 1] = 1
arr[ 2] = 2
arr[ 3] = 3
arr[ 4] = 6
arr[ 5] = 7
arr[ 6] = 8
5 4 2 1
5 4 3
6 4 2
6 5 1
(индексы, правда, выводятся в порядке, соответствующем от большего элемента массива к меньшему - хотя индексы как раз можно и пересортировать, они могут выводиться в любом порядке - и существует ограничение: элементы массива - типа Byte, т.е. в интервале 0 .. 255, но я думаю, тебе этого хватит...)
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 3.07.2025 20:24
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"