Читайте также: |
|
add(item)
x = h1(item.key)
y = h2(item.key)
for (i = 0; i < m; i++)
if table[x] == null
table[x] = item
return
x = (x + y) mod m
table.resize() //ошибка, требуется увеличить размер таблицы
Поиск
search(key)
x = h1(key)
y = h2(key)
for (i = 0; i < m; i++)
if table[x]!= null
if table[x].key == key
return table[x]
else
return null
x = (x + y) mod m
return null
Лабораторная работа «Массивы», задание №30.
Задание.
Даны два массива x[1]<=..<=x[n] и y[1]<=..<=y[n]. Найти их «пересечение», т.е. массив z[1]<=..<=z[m], содержавший их общие элементы, причём кратность каждого элемента в массиве z равняется минимуму из его кратностей в массивах x и y. Число действий должно быть порядка k+1.
Описание алгоритма решения.
В методе Sort() мы сортируем данные в массивах т.к. есть условие x[1]<=..<=x[n]. Затем в методе Union and Multiplicity мы объединяем в массиве z наши массивы a и b. Длина массива z равен длине обоих массивов: a.Length + b.Length. Затем идёт цикл do-while в котором мы ищем индексности кратности элементов. Попутно отлавливаем ошибки в методе catch.
Листинг программы.
void Sort(int[] A)
{
for (int i = 0; i < A.Length; i++)
{
for (int j = i+1; j < A.Length; j++)
{
if (A[j] < A[i])
{
var temp = A[i];
A[i] = A[j];
A[j] = temp;
}
}
}
}
public int[] Union and Multiplicity (int[] a, int[] b)
{
int[] z = new int[a.Length+b.Length];
for(int i = 0; i < a.Length; i++)
z[i] = a[i];
for(int j = 0; j < b.Length; j++)
z[a.Length + j] = b[j];
do
{
z[a.Length + j] = Convert.ToInt32(Console.ReadLine());
if (Math.Abs(z[a.Length + j]) > n) {
Console.WriteLine("Нет индексов кратных", k);
}
else i = 0;
}
while ((i < n) || (n > nmax));
catch (Exception e) {
Console.WriteLine(e.ToString());
}
}
Дата добавления: 2015-08-17; просмотров: 50 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Характеристики метода | | | Лабораторная работа «Списки», задание №9. |