Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.01.2011, 16:50   #1
Косюра
Пользователь
 
Аватар для Косюра
 
Регистрация: 14.01.2011
Сообщений: 74
Смущение Задачи на Delphi. Алгоритмы задач на массивы.

В общем и целом дела такие. Готовлюсь к экзамену - нашла множество различных задач. Вроде соображалка всегда работала а вот в этих задачах даже придумать приблизительно алгоритм не могу((

Помогите кто чем может

1. Покупатель имеет купюры достоинством A(1), ...,A(n), а продавец - B(1), .. ,B(m). Необходимо найти максимальную стоимость товара Р, которую покупатель не может купить, потому что нет возможности точно рассчитаться за этот товар с продавцом, хотя денег на покупку этого товара достаточно.

2. Задан массив М [1:N] натуральных чисел, упорядоченный по неубыванию, т.е.: M[1]<=M[2]<=...<=M[N].
Найти первое натуральное число, не представимое суммой никаких элементов этого массива, при этом сумма может состоять и из одного слагаемого, но каждый элемент массива может входить в нее только один раз.

3. Имеется N камней веса А1,А2,...,АN.
Необходимо разбить их на две кучи таким образом, чтобы веса куч отличались не более чем в 2 раза. Если этого сделать нельзя, то указать это.
Предусмотреть вариант: веса куч отличаются не более, чем в 1,5 раза

4. Задается словарь. Найти в нем все анаграммы (слова, составленные из одних и тех же букв).

5. В музее регистрируется в течение дня время прихода и ухода каждого посетителя. Таким образом за день получены N пар значений, где первое значение в паре показывает время прихода посетителя и второе значения - время его ухода. Найти промежуток времени, в течение которого в музее одновременно находилось максимальное число посетителей.

6. -решено-

7. Дан массив X[1..N]. Необходимо циклически сдвинуть его на k элементов вправо (т.е. элемент X[i] после сдвига должен стоять на месте X[i+k]; тут мы считаем что за X[N] следует X[1]). Дополнительных массивов не использовать.

8. Даны обозначения двух полей шахматной доски (например, A5 и C2). Найти минимальное число ходов, которые нужны шахматному коню для перехода с первого поля на второе.

9. N серых и M белых мышей сидят по кругу. Кошка ходит по кругу по часовой стрелке и съедает каждую S -тую мышку. В первый раз счет начинается с серой мышки. Составить алгоритм определяющий порядок в котором сидели мышки, если через некоторое время осталось K серых и L белых мышей.

10. Из листа клетчатой бумаги размером М*N клеток удалили некоторые клетки. На сколько кусков распадется оставшаяся часть листа?
Пример: Если из шахматной доски удалить все клетки одного цвета, то оставшаяся часть распадется на 32 куска.
Второй вариант: То же, но перед удалением клеток лист склеили в цилиндр высотой N.
Девушка - переменная бинарного типа с рандомным значением

Последний раз редактировалось Косюра; 19.01.2011 в 17:07.
Косюра вне форума Ответить с цитированием
Старый 19.01.2011, 17:39   #2
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

7
Цитата:
Пусть A - это k первых элементов массива X, а B - последних N-K. Нам необходимо из вектора AB получить вектор BA. Пусть у нас есть подпрограмма REVERSE(I,j), которая реверсирует (меняет порядок элементов на обратный) часть массива x с индексами от i до j. Начав с массива AB реверсируем часть A, получаем (Ar)B; реверсируrем B, получаем (Ar)(Br); реверсируем весь массив, получаем((Ar)(Br))r =BA.
Продемонстрируем описанный алгоритм на примере. Пусть X есть последовательность 1,2,3,4,5, k=3:
REVERSE(1,K); {3,2,1,4,5}
REVERSE(K+1,N); {3,2,1,5,4}
REVERSE(1,K); {4,5,1,2,3}
источник и остальные тут
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"
Mad_Cat вне форума Ответить с цитированием
Старый 19.01.2011, 18:04   #3
Atoris
Пользователь
 
Регистрация: 10.10.2010
Сообщений: 32
По умолчанию

4ая задача на множества.
Atoris вне форума Ответить с цитированием
Старый 19.01.2011, 18:10   #4
Косюра
Пользователь
 
Аватар для Косюра
 
Регистрация: 14.01.2011
Сообщений: 74
По умолчанию

Ух, клево, спасибо огромное. Тему можно закрыть.
Девушка - переменная бинарного типа с рандомным значением
Косюра вне форума Ответить с цитированием
Старый 19.01.2011, 18:15   #5
Atoris
Пользователь
 
Регистрация: 10.10.2010
Сообщений: 32
По умолчанию

Оля, Оля... =)
Atoris вне форума Ответить с цитированием
Старый 19.01.2011, 19:46   #6
Atoris
Пользователь
 
Регистрация: 10.10.2010
Сообщений: 32
По умолчанию

№4

Код:
program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;

const
  N = 3;  // количество слов

var
  //вектор слов
  A: array[1..N] of String;
  // переменные цикла
  I, J, K, M: Integer;
  // множества символов двух сравниваемых слов
  B, C: set of Char;

  G: Integer; //Cчётчик анаграмм


begin

  WriteLn('Введите ', N,' слов(-a): ');
  for I := 1 to N do
    ReadLn(A[I]);

  WriteLn('Вы ввели слова: ');
  for I := 1 to N do
    WriteLn(A[I],' ');

  // Алгоритм(кратко): каждое слово сравниваем со остальными всеми словами
  C := [];
  B := [];
  G := 0;
  WriteLn;
  WriteLn('Анаграммы: ');
  WriteLn;
  for K := 1 to N do
  begin
    for M := 1 to Length(A[K]) do
      B := B + [(A[K])[M]];

    for I := 1 to N do

      if I <> K then
      begin
        for J := 1 to Length(A[I]) do
          C := C + [(A[I])[J]];

        if B = C then
        begin
          Inc(G);
          WriteLn(A[K], ' - ',A[I]);
        end;
      end;

      // Очищаем множества
      C := [];
      B := [];

  end;

  if G = 0 then
     WriteLn('Анаграмм нет!');

  ReadLn;
end.
бэтаверсия =)

отлаживать ещё надо...

Последний раз редактировалось Atoris; 19.01.2011 в 19:51.
Atoris вне форума Ответить с цитированием
Старый 20.01.2011, 16:29   #7
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

ну а вот мой вариант
4
Код:
(*Код работает в Delphi10(2006)*)
program Project3;

{$APPTYPE CONSOLE}

uses
  SysUtils;
type Строка = string;
     Целое = Integer;
function Анаграмма(s1,s2:Строка):boolean;
var i:Integer;
begin
 result:=False;
 if Length(s1)<>Length(s2) then Exit;
 s1:=UpperCase(s1);s2:=UpperCase(s2);
 for I := 1 to Length(s1)  do
   begin
   if Pos(s1[i],s2)=0 then Exit;
   Delete(s2,Pos(s1[i],s2),1);
   end;
  result:=True;
end;
procedure Вывод_слова(s1:строка);
begin
  Writeln(s1);
end;
procedure Ждать_нажатия_клавиши;
begin
  Readln;
end;
const количество=4;
var Массив_Строк:array [1..количество] of строка;
 индекс,индекс_1 :Целое;
begin
 (*Ввод массива*)
 for индекс := 1 to количество do
  Readln(Массив_строк[индекс]);
Вывод_слова('===================================');
  (*Вывод массива*)
  for индекс := 1 to количество do
   Вывод_слова(Массив_строк[индекс]);
Вывод_слова('===================================');
 (*Проверка массива*)
 for индекс := 1 to количество-1 do  begin
  Вывод_слова(Массив_строк[индекс]);
   for индекс_1 := индекс+1 to количество do
   if Анаграмма(Массив_строк[индекс], Массив_строк[индекс_1]) then
     Вывод_слова(Массив_строк[индекс_1]);
 Вывод_слова('===================================');
 end;
 Ждать_нажатия_клавиши;
end.
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"
Mad_Cat вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
задачи по теме "Линейные алгоритмы" на Delphi 7 matrix8325 Помощь студентам 2 20.04.2009 22:53
Delphi: 3 задачи на массивы Sianessa Помощь студентам 12 23.02.2009 21:58
Delphi: решить 4 задачи на массивы Sianessa Помощь студентам 39 22.01.2009 22:15