Задачи за тренинг

Задача 8а.
Социално-осигурителната система на България изиска всеки работещ гражданин всеки месец да внася осигурителна вноска. Вноската е между 20 и 200 лева, което се определя като 10% от месечната заработка при осигурителен минимум 200 лева и осигурителен максимум 2000 лева. Да се напише програма, която извежда броят на работещите, чиято месечна вноска е в зададен интервал. 

Вход:
На входа се задава броя на месечните вноски  - число, по-малко от 6000000. Следва редица от числа - месечните вноски на работещите в лева, които са числа между 20 и 200 с два знака след десетичната точка. След това са зададени интервали, за които трябва да се преброи колко вноски попадат в интервала. Броят на интервалите е по-малък от 10000, а краищата им са числа между 20 и 200.
.
Изход:

За всеки интервал от входа се отпечатва броят вноски, които попадат в него (включително на краищата му), за всеки интервал на отделен ред.

Пример:
10
20.50 30 40 52.35 160 200 23.2 20.50 20 155.25
20 40
30 30
100 120
52.35 60.2
20 200

Решение на примера:
6
1
0
1
10

Задача 8b.
Даден е текст на български език, който може да се запише във файл с дължина 10 мегабайта. Да се намери броят на колизиите при хеширане на думите от текста с повече от 3 букви със следната хеш функция:

int hashCode(const char* p, int len) // hash a character array
{
  unsigned int h = 0;
  for (int i = 0; i < len; i++)
  {
     h = (h << 5)|(h >> 27); // 5-bit cyclic shift
     h += (unsigned int)p[i]; // add in next character
  }
  return abs(int(h)%60000);
}


Вход:
Задава се текстът на български език.

Изход:
Извеждат се следните числа: брой думи без колизии, брой колизии с две думи, брой колизии с три думи и т.н. с разделител интервал.

Пример:
Даден е текст на български език, който може да се запише във файл с дължина 10
мегабайта. Да се намери броят на колизиите при хеширане на думите от текста с
повече от 2 букви със следната хеш функция: следната хеш функция; хеш функция;
функция


Решение на примера:
18 1 0 1

Забележка: Една дума, която се среща 2 пъти в текста също да се брои като колизия. Дума е низ от букви, ограден с интервали и/или специални символи.