Вопрос № 94685: Пожалуйста,помогите решить задачи :
1. Даны два одномерных целочисленных массива А и В. Составить алгоритм, определяющий, можно ли путем перестановки элементов массива А получить массив В (алгоритмы сортировки использовать нельзя).
2. Дан о...Вопрос № 94752: Пожалуйста,помогите решить три задачи:
1. Дан одномерный массив целых чисел. Найти количество чисел среди элементов массива, встречавшихся ровно 1 раз.
2. Дан одномерный массив. Поменять в нем порядок четных элементов на обратный.
Приме...Вопрос № 94754: Help me, please!!! Вот задачки:
1. Известны данные о вместимости (в мегабайтах) и стоимости (в рублях) каждого из 22 типов жестких магнитных дисков (винчестеров). Напечатать наибольшую вместимость винчестеров, стоимость которых не превышает s руб...Вопрос № 94781: Уважаемые эксперты!! Проверьте, пожалуйста моё решение 2х задач(в приложении)… Что в них не так? Не могу понять, где ошибки допустила. А условия задач вот:
1. Дана непустая последовательность натуральных чисел, оканчивающаяся числом, являющимся ф...
Вопрос № 94.685
Пожалуйста,помогите решить задачи :
1. Даны два одномерных целочисленных массива А и В. Составить алгоритм, определяющий, можно ли путем перестановки элементов массива А получить массив В (алгоритмы сортировки использовать нельзя).
2. Дан одномерный массив целых чисел в диапазоне от –100 до 100, в котором есть повторяющиеся элементы. Составить алгоритм, определяющий, какой элемент встречается в массиве наиболее часто (алгоритмы сортировки использовать не рекомендуется, вводить дополнительные массивы не разрешается).
Заранее спасибо! Swallow.
Отправлен: 10.07.2007, 23:58
Вопрос задала: Ласточка (статус: Посетитель)
Всего ответов: 3 Мини-форум вопроса >>> (сообщений: 5)
Отвечает: Gh0stik
Здравствуйте, Ласточка!
Вот привожу решение на вторую часть вопроса.
const n=10; {количество элементов в массиве}
var x:array [1..n] of integer;
mx,mk,k,i,j:integer;
begin
randomize;
for i:=1 to n do
begin
x[i]:=random(100)-random(100); {генерируем чисела из диапазона от –100 до 100}
write(x[i]:5);
end;
mx:=x[1]; k:=0; mk:=1;
for i:=1 to n-1 do
begin
for j:=2 to n do
if x[i]=x[j] then
begin
inc(k);
if k > mk then begin mx:=x[i];mk:=k;end;
end;
k:=0;
end;
writeln;
writeln('?=',mx, 'count=',mk); {выводим элемент и сколько раз он встречается}
end.
Единственное, что хотелось бы уточнить, так это, то что программа будет выводить "первое" число по порядку, которое встречается максимальное число раз. (ведь таких чисел может быть и несколько)
Для того, чтобы вывести "последние" число по порядку достаточно изменить условие: if k > mk then begin mx:=x[i];mk:=k;end;
на if k >= mk then begin mx:=x[i];mk:=k;end;
Good Luck!!!
--------- Господь Бог - это всего лишь сверхмощный генератор случайных чисел, в соответствии с которыми сочетаются события на Земле. Генератор случайных чисел - и только.
Ответ отправил: Gh0stik (статус: Профессор) Украина, Славянск Организация: Славянский государственный педагогический университет (Кафедра алгебры) ICQ: 289363162 ---- Ответ отправлен: 11.07.2007, 00:30 Оценка за ответ: 5 Комментарий оценки: Огромное спасибо!!Вы мне очень помогли
Отвечает: _killhunter_
Здравствуйте, Ласточка!
Привожу решение 1-ой части вопроса.
Алгоритм простой. Создаем дополнительный масссив F той-же длинны с флагами.
Идем последовательно по массиву А и для каждого элемента ищем такой-же в массиве В, причем если находим на i-том месте, то делаем флаг F[i] := false и элемент B[i] больше в поиске не участвует.
Приложение:
Ответ отправил: _killhunter_ (статус: 1-ый класс)
Ответ отправлен: 11.07.2007, 11:15 Оценка за ответ: 5 Комментарий оценки: Спасибо огромное за помощь!Безмерно благодарна.
Отвечает: mvp
Здравствуйте, Ласточка!
Ну, раз за дополнительные массивы по первому заданию ставят 5 :), и мини-форум не читают, то первое задание решается гораздо проще: найдите сумму разности эл-ов массивов. Если она равна 0, то можно:
var A, B : Array[1..n] of ...;
//инициализируем как-то массивы;
sum := 0;
for _:=1 to n do sum := sum + A[_] - B[_] ;
if sum = 0 then {
можно :)
}
--------- Моя совесть чиста - не бывшая в употреблении
Ответ отправил: mvp (статус: Студент)
Ответ отправлен: 11.07.2007, 23:16 Оценка за ответ: 5 Комментарий оценки: Спасибо, mvp! Да у меня просто рука не поднимется поставить оценку ниже пятёрки, человеку, который не пожалел своего драгоценного времени и хоть как-то, в силу своих возможностей, ответил на мой вопрос. Такой уж я человечек.
Вопрос № 94.752
Пожалуйста,помогите решить три задачи:
1. Дан одномерный массив целых чисел. Найти количество чисел среди элементов массива, встречавшихся ровно 1 раз.
2. Дан одномерный массив. Поменять в нем порядок четных элементов на обратный.
Пример:
исходный массив – 2 5 3 7 4 6 4 5 9
преобразованный массив – 4 5 3 7 6 4 2 5 9
3. Дан одномерный массив целых чисел. Определить, есть ли в массиве последовательность идущих подряд элементов, сумма которых равна заданному числу.
Если это возможно, то в наиболее упрощённом варианте и с пояснениями. Заранее большое спасибо. Swallow.
Отправлен: 11.07.2007, 12:28
Вопрос задала: Ласточка (статус: Посетитель)
Всего ответов: 3 Мини-форум вопроса >>> (сообщений: 2)
Отвечает: Gh0stik
Здравствуйте, Ласточка!
1) Думаю что данная задача в особых комментариях не нуждается: const n=10; {количество элементов в массиве}
var x:array [1..n] of integer;
kol,k,i,j:integer;
begin
randomize;
for i:=1 to n do
begin
x[i]:=random(100)-random(100); {генерируем чисела из диапазона от –100 до 100}
write(x[i]:5);
end;
k:=0; kol:=0;
for i:=1 to n do
begin
for j:=1 to n do
if x[i]=x[j] then inc(k);
if k=1 then inc(kol);
k:=0;
end;
writeln;
writeln('count=',kol); {выводим количество "одиноких" элементов}
end.
2) Идея в том, что мы двигаемся в массиве с двух сторон навстречу и ищем четные элементы, как только их встречаем сразу же переставляем местами. Заканчиваем поиск и перестановку как только i > j. const n=9; {количество элементов в массиве}
var x:array [1..n] of integer;
k,i,j:integer;
begin
for i:=1 to n do
begin
write('x[',i,']='); readln(x[i]); {вводим элементы массива с клавиатуры}
end;
for i:=1 to n do write(x[i]:5);
writeln;
i:=1; j:=n;
while i < j do
begin
while odd(x[i]) do inc(i); {находим индекс четного элемента начиная слева}
while odd(x[j]) do dec(j); {находим индекс четного элемента начиная справа}
k:=x[i];
x[i]:=x[j]; {переставляем их местами}
x[j]:=k;
inc(i); dec(j);
end;
for i:=1 to n do write(x[i]:5); {выводим полученный результат}
readln;
end.
Good Luck!!!
--------- Господь Бог - это всего лишь сверхмощный генератор случайных чисел, в соответствии с которыми сочетаются события на Земле. Генератор случайных чисел - и только.
Ответ отправил: Gh0stik (статус: Профессор) Украина, Славянск Организация: Славянский государственный педагогический университет (Кафедра алгебры) ICQ: 289363162 ---- Ответ отправлен: 11.07.2007, 13:02 Оценка за ответ: 5 Комментарий оценки: Огромное спасибо! Это как раз то, что я хотела. Спасибо, что учли мои пожелания относительно поянений в тексте решения.
Отвечает: Louken
Здравствуйте, Ласточка!
Решение первой и третьей задачи в приложении:
Приложение:
Ответ отправил: Louken (статус: 10-ый класс)
Ответ отправлен: 11.07.2007, 13:54 Оценка за ответ: 5 Комментарий оценки: Огромное спасибо за помощь! В особенности, за развёрнутые комметрарии к решению. Это как раз то, что я хотела.
Отвечает: Дмитрий С.
Здравствуйте, Ласточка!
1.
var MS: array [1..k] of integer; // k <= 64;
count, i: integer;
mn: set of byte;
begin
// заполняем массив MS
count := 0; mn := [];
for i:=1 to k do
if not (MS[i] in mn) then
begin
mn := mn + [MS[i]];
inc(count);
end;
end.
Всего count элементов.
--------- Наши программисты самые программистые программисты!..
Ответ отправил: Дмитрий С. (статус: 2-ой класс)
Ответ отправлен: 14.07.2007, 15:41
Вопрос № 94.754
Help me, please!!! Вот задачки:
1. Известны данные о вместимости (в мегабайтах) и стоимости (в рублях) каждого из 22 типов жестких магнитных дисков (винчестеров). Напечатать наибольшую вместимость винчестеров, стоимость которых не превышает s рублей. Вывести номера типов таких винчестеров.
2. Даны 20 точек (x1,y1), (x2,y2), … (x20,y20). Рассмотрим всевозможные прямоугольники со сторонами, параллельными координатным осям с левой нижней и правой верхней или с левой верхней и правой нижней вершинами в этих точках. Найти и вывести координаты всех вершин прямоугольника, имеющего наименьшую площадь.
3. В области 10 районов. Заданы площади, засеваемые пшеницей (в гектарах), и средняя урожайность (в центнерах с гектара) в каждом районе. Определить количество пшеницы, собранное в области, и среднюю урожайность по области.
Хотелось бы получить ответ в наиболее упрощённом варианте и с пояснениями. Всем, кто сможет хоть как-то помочь заранее очень благодарна. Swallow.
Отправлен: 11.07.2007, 12:36
Вопрос задала: Ласточка (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 2)
Отвечает: Зенченко Константин Николаевич
Здравствуйте, Ласточка!
Смотрите приложение.
Удачи!
Приложение:
--------- И только наступив на грабли мы приобретаем драгоценный опыт!
Ответ отправил: Зенченко Константин Николаевич (статус: Практикант)
Ответ отправлен: 11.07.2007, 16:12 Оценка за ответ: 5 Комментарий оценки: Огромное спасибо,Константин Николаевич! Попробую разобраться сейчас в ваших вариантах решения к задачам. Вы мне очень помогли! Спасибо)
Вопрос № 94.781
Уважаемые эксперты!! Проверьте, пожалуйста моё решение 2х задач(в приложении)… Что в них не так? Не могу понять, где ошибки допустила. А условия задач вот:
1. Дана непустая последовательность натуральных чисел, оканчивающаяся числом, являющимся факториалом некоторого натурального числа. Определить в этой последовательности порядковый номер числа, имеющего максимальную сумму цифр.
2. Дан одномерный массив целых двоичных чисел (число в двоичной записи представлено строкой). Не делая перевода в десятичную систему счисления, определить количество и номера элементов массива, кратных четырем.
Надеюсь, поможете. Заранее большое спасибо! Swallow.
Приложение:
Отправлен: 11.07.2007, 15:24
Вопрос задала: Ласточка (статус: Посетитель)
Всего ответов: 3 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Flynn
Здравствуйте, Ласточка!
Ошибка второй задачи в том, что процедуры POS выбырает у тебя не последние два нуля, а первые. И тогда если число будет 100100, оно не определяет его как делимое. Используй copy.
Cо первой задачей подольше разбираться надо.
Приложение:
Ответ отправил: Flynn (статус: 1-ый класс)
Ответ отправлен: 11.07.2007, 16:13 Оценка за ответ: 4 Комментарий оценки: Большое спасибо за участие в разрешении моей проблемы. Попробую востользоваться вашими советами относительно второй задачи.
Отвечает: Louken
Здравствуйте, Ласточка!
Исправленное решение обоих задача в приложении:
Приложение:
Ответ отправил: Louken (статус: 10-ый класс)
Ответ отправлен: 11.07.2007, 16:50
Отвечает: Зенченко Константин Николаевич
Здравствуйте, Ласточка!
Правильное решение 1-ой задачи.
Т.к. Дана непустая последовательность натуральных чисел, оканчивающаяся числом, являющимся факториалом т.е. последнее число(факториал) является элементом последовательности. Но его сумма цифр не учитывается. К примеру:210(3),340(7),510(6),720(9)
ps: Function Sum_tsifr(x:integer):integer;
зачем объявлять переменную и потом забыть о ней.
Удачи!
Приложение:
--------- И только наступив на грабли мы приобретаем драгоценный опыт!
Ответ отправил: Зенченко Константин Николаевич (статус: Практикант)
Ответ отправлен: 12.07.2007, 10:51 Оценка за ответ: 5 Комментарий оценки: Да.. я что-то проглядела. Глупая ошибка, но самостоятельно я её найти почему-то не смогла. Огромное спасибо за ответы на мои вопросы!