Автор | Паскаль |
Прошу знающих людей помочь разобраться.
Задание1.
Имеются массивы чисел A(N), B(N). Составить из них N пар(a[i],b[j]) таким образом, чтобы сумма произведений пар была минимальна. Каждое a[i] и b[j] должно встречаться ровно в одной паре.
Вот набросал. Почему-то отвечает мне рядом нулей. И не ясно, как выполнить условие в последнем предложении задания.
Program z4;
const max=1000;
type mas=array[1..max] of integer;
var a,b,m:mas;
n,j,i,S,x:integer;
begin
readln(n);
for i:=1 to n do readln(a[i]);
for i:=1 to n do readln(b[i]);
for i:=2 to n do
for j:=n downto i do
if m[j-2]>m[j] then
begin
x:=m[j-1];
m[j-1]:=m[j];
m[j]:=x;
end;
for i:=1 to n do write(m[i]:4);
writeln;
end.
for i:=2 to n do
for j:=n downto i do
if m[j-2]>m[j] then
begin
x:=m[j-1];
m[j-1]:=m[j];
m[j]:=x;
end;
for n downto i do write(m[i]);
sum:=0;
for i:=to n do
begin
write('+',a[i],'*',b[i]);
sum:=sum+a[i]*b[i];
end;
writeln('=',sum);
end. |
[Сообщение удалено смотрителем rose25 // ] |
Сори за возможные затупы. Давно не практиковался, и вообще жаворонок я. )
Заодно если можно подскажите, что сделать с таким заданием:
Дана последовательность целых чисел, среди которых нет одинаковых. Требуется вычеркнуть минимальное возможное количество чисел так, чтобы оставшиеся шли в порядке возрастания. |
для RuslannN:
Бан. :(
Исключительно большое человеческое спасибо. ) |
Ну я примерно знаню как решить но на паскале немогу.Могу на С++ написать |
а шибко они отличаются? |
ну вообще-то да.Я написать на паскале немогу.Могу примерно сказать что надо делать а ты сам пиши как нить |
актуально |
1+. В 19 строке компилятор почему-то потребовал точку. |
9: там вообще лишний end. три его - ессно требует . т.к. думает, что всё |
плохо понял задание
но на php или js, думаю, решил бы |
Блин... Паскалем со школы не пользовался... Побробую решить. Если что получится - выложу. |
Ни чего не поняла, где задание масива m? Что он означает? Там же по ходу одни нули которые потом и выводятся. |
разбирать чужие программы- неблагодарное дело. проще сделать самому и с нуля.
по делу- в паскале есть замечательная функция. ctrl+f7 наблюдение за переменными. вводим туда интересующие массивы и делаем программу по шагам. это лучший инструмент для отладки.
Каждое a[i] и b[j] должно встречаться ровно в одной паре. - то есть элементы не должны повторяться в конечном массиве. (некоторым элементам пара не найдется). но я в задание не вчитывался |
1. Ввести масивы а и b (с чем ты уже справился)
2. Упорядочить один масив по возрастанию, второй по убыванию
3. Перемножить по порядковым номерам пары и сложить (это тоже есть)
4. Вывести результат (так же имеется)
Вся задача сводится к этим четырём пунктам |
В целом нужно сделать как подсказывает Раздетая. Я так просто, прокомментить некоторые куски.
n,j,i,S,x:integer;
Нигде не используемая переменная S (при наличии не объявленной переменной sum) ;)
for i:=1 to n do write(m[i]:4);
writeln;
end.
Здесь какбы вывод неопределённого (почему - ниже) содержимого массива m и конец программы.
for i:=2 to n do
for j:=n downto i do
if m[j-2]>m[j] then
begin
x:=m[j-1];
m[j-1]:=m[j];
m[j]:=x;
end;
Массив m нигде ранее не заполнялся, с какими по твоему значениями работают эти циклы? Незнаю, как там в паскале, но он либо пуст, либо забит чёрте чем.
Вообще похоже на сортировку пузырьковым методом, значит двигался в правильном направлении) |
[Сообщение удалено смотрителем rose25 // ] |
Спасибо. Значит надо m заполнить. А с Дана последовательность целых чисел, среди которых нет одинаковых. Требуется вычеркнуть минимальное возможное количество чисел так, чтобы оставшиеся шли в порядке возрастания. можете чего подсказать? |
М? |
Значит надо m заполнить
Нужно упорядочить a и b, один по возрастанию, второй по убыванию. Затем перемножить соответствующие элементы. Массив m наверно для этих произведений и был создан. |