Даны два массива X[1] <= ... <= X[k], Y[1] <= ... <= Y[l].

Тема в разделе ".NET", создана пользователем EduDo, 15 дек 2010.

Статус темы:
Закрыта.
  1. EduDo

    EduDo Гость

    Даны два массива x[1] <= ... <= x[k], y[1] <= ... <= y[l].
    Найти их "пересечение", т.е. массив z[1] <= ... <= z[m],
    содержащий их общие элементы, причем, кратность каждого элемента
    в массиве z равняется минимуму из его кратностей в массивах x и y.
    Число действий должно быть порядка k+l.

    Ниже Код, выполненый на ПасКАЛЕ, помогите в C# перевести... С синтаксисом никак не могу разобраться



    Program InterSect;

    Const
    cMaxIndex = 100; { максимальное число элементов для определения массива }

    Type
    TIndex = 1..cMaxIndex; { тип для описания индекса }
    TArray = array [0..cMaxIndex] of Word; { описание массива. Элемент с индексом 0 - верхняя граница массива }

    Var
    x : TArray; { массив x }
    y : TArray; { массив y }
    z : TArray; { массив z }

    { Процедура печати массива }
    Procedure Print (a : TArray; title : string);
    var
    i : TIndex;

    begin
    write (title, ':');
    for i := 1 to a [0] do
    write (' ', a );
    writeln;
    end;

    { Процедура ввода массива }
    Procedure Input (var a : TArray; title : string);
    var
    i : TIndex;

    begin
    writeln ('Введите элементы массива ', title, ' (не более ', cMaxIndex, ' элементов). Введите 0 для окончания ввода');

    a [0] := 0;

    for i := 1 to cMaxIndex do
    begin
    readln (a );
    if a = 0 then break
    else Inc (a [0]);
    end;
    end;

    { Процедура для вормирования "пересечения" массивов }
    Procedure InterSection (a : TArray; b : TArray; var c : TArray);
    var
    i : TIndex; { переменная для перебора элементов первого массива }
    j : TIndex; { переменная для перебора элементов второго массива }

    n : TIndex; { количество элементов первого массива }
    m : TIndex; { количество элементов второго массива }

    begin
    n := a [0];
    m := b [0];

    c [0] := 0;
    j := 1;
    i := 1;

    { пока есть элементы в первом массиве }
    while i <= n do
    begin
    { находим первый элемент во втором массиве, который не меньше текущего из первого }
    while (j <= m) and (b [j] < a ) do Inc (j);
    if j > m then break;

    { добавляем одинаковые элементы в третий массив (меньшая кратность получается автоматически) }
    while a = b [j] do
    begin
    { Заносим элемент в массив c }
    Inc (c [0]);
    c [c [0]] := a ;

    { переходим к следующим элементам исходных массивов }
    Inc (i);
    Inc (j);

    { проверяем границы массивов }
    if (i > n) or (j > m) then break;
    end;

    { пропускаем элементы первого массива до тех пор, пока очередной элемент не станет больше или равен текущего элемента второго массива }
    while (i <= n) and (a < b [j]) do Inc (i);
    end;
    end;

    Begin
    Input (x, 'x');
    Input (y, 'y');

    Print (x, 'x');
    Print (y, 'y');

    InterSection (x, y, z);

    Print (z, 'z');
    End.
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей