Решение: Поиск дедушек и бабушек
Ниже представлены два фрагмента таблиц из базы данных о жителях микрорайона. Каждая строка таблицы 2 содержит информацию о ребёнке и об одном из его родителей. Информация представлена значением поля ID в соответствующей строке таблицы 1. Определите, у скольких жителей есть хотя бы один внук или одна внучка, с которым (которой) они родились в одном городе. При вычислении ответа учитывайте только информацию из приведённых фрагментов таблиц.
| ID | Фамилия_И.О. | Пол | Место_рождения | ID_Родителя | ID_Ребёнка |
|---|---|---|---|---|---|
| 40 | Даль Г.Е. | М | Воронеж | 47 | 40 |
| 45 | Даль Е.Г. | М | Воронеж | 40 | 45 |
| 47 | Даль С.Т. | Ж | Пенза | 48 | 45 |
| 48 | Даль Т.Т. | Ж | Курск | 54 | 47 |
| 49 | Мазинг М.Г. | М | Тула | 55 | 47 |
| 50 | Мазинг М.Т. | Ж | Тула | 60 | 48 |
| 53 | Мазинг О.Г. | Ж | Курск | 62 | 48 |
| 54 | Макаренко А.Т. | Ж | Воронеж | 50 | 49 |
| 55 | Макаренко Т.Е. | М | Воронеж | 60 | 50 |
| 57 | Мелконян Е.А. | М | Пенза | 62 | 50 |
| 60 | Мелконян Т.Е. | М | Пенза | 50 | 53 |
| 62 | Мелконян Т.К. | Ж | Тула | 57 | 60 |
| 65 | Сиротенко Е.И. | Ж | Тула | 65 | 62 |
| 69 | Сиротенко К.К. | М | Пенза | 65 | 69 |
Решение по шагам
6 шаговПо таблице 2 строим цепочки из двух связей «родитель — ребёнок», то есть находим пары «дедушка или бабушка — внук или внучка».
Для жителя с ID 54: его ребёнок имеет ID 47, а внук — ID 40. Места рождения: Воронеж и Воронеж.
Для жителя с ID 55: его ребёнок имеет ID 47, а внук — ID 40. Места рождения: Воронеж и Воронеж.
Для жителя с ID 62: через ребёнка с ID 50 находится внук с ID 49. Места рождения: Тула и Тула.
Для жителя с ID 65: через ребёнка с ID 62 находится внук с ID 50. Места рождения: Тула и Тула.
У остальных жителей, для которых можно проследить две родственные связи, место рождения дедушки или бабушки не совпадает с местом рождения внука или внучки.
Где здесь ошибаются
Считать всех жителей, у которых есть ребёнок, а не внук.
Учитывать совпадение места рождения родителя и ребёнка вместо дедушки или бабушки и внука.
Повторно считать одного и того же жителя при наличии нескольких родственных цепочек.