Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
0 / 0 / 0
Регистрация: 11.12.2013
Сообщений: 23

Найти всех предков человека с номером p

11.12.2013, 07:04. Показов 2406. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
заданы n человек и два массива натуральных чисел mother[n] и father[n], такие, что mother[i] – номер матери i-го человека, а father[i] – номер его отца, для каждого i, удовлетворяющего неравенствам 0 <= (меньше или равно) i <= n-1.

Найти всех предков человека с номером p
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.12.2013, 07:04
Ответы с готовыми решениями:

Определить предикат предок и найти всех предков и предков конкретного лица
ОЧЕНЬ нужна помощь! Задача такая: Определить предикат предок и найти всех предков и предков конкретного лица. Может кто-нибудь...

Определить предикат предки по женской линии и найти всех предков по женской линии и предков конкретного лица
Здравствуйте! Помогите пожалуйста решить задау на ТУРБО ПРОЛОГЕ. Определить предикат предки по женской линии и найти всех предков по...

Выбрать всех предков в один запрос
Есть таблица +----+--------+ | id | parent | +----+--------+ | 2 | NULL | | 3 | 2 | | 4 | 3 | | 5 | 4...

9
Продам уран 238U
 Аватар для bradobrei
126 / 125 / 127
Регистрация: 22.01.2013
Сообщений: 298
11.12.2013, 07:37
я не совсем понял задание, вообщем я сверяю p с числами в массивах мам и пап и если есть совпадение, то вывожу
их
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <cstdlib>
using namespace std;
#define n 10
int main(){
    int mother[n], father[n];
    for(int i = 0; i < n; i++){
        mother[i] = rand()% 20 + 1;
        father[i] = rand()% 20 + 1;
    }
    int p = 10; //для него находим предков
    for(int i = 0; i <= (n - 1); i++){
        if( mother[i] == p){
            cout<<"Предок для p = "<<p<<" mother["<<i<<"] = "<<mother[i];
            if(father[i] == p)
                cout<<"Предок для p = "<<p<<" father["<<i<<"] = "<<father[i];
        }
    }
return 0;
}
1
0 / 0 / 0
Регистрация: 11.12.2013
Сообщений: 23
11.12.2013, 08:03  [ТС]
а почему у него папу не выводит?
0
Продам уран 238U
 Аватар для bradobrei
126 / 125 / 127
Регистрация: 22.01.2013
Сообщений: 298
11.12.2013, 08:08
значит нет у него отца (
вообще можешь сам ввести значения и там уже будешь ориентироваться будут ли у твоего p предки
для этого замени это
C++
1
2
mother[i] = rand()% 20 + 1;
        father[i] = rand()% 20 + 1;
на это
C++
1
2
cin >> mother[i];
       cin >> father[i];
1
0 / 0 / 0
Регистрация: 11.12.2013
Сообщений: 23
11.12.2013, 08:33  [ТС]
ввел я этот код уже с cin и выдает просто пустое окно полсе того как вожу туда числа оно тупо закрывается


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <cstdlib>
#include <conio.h>
using namespace std;
#define n 10
int main(){
    int mother[n], father[n];
    for(int i = 0; i < n; i++)
    {
        cin >> mother[i];
        cin >> father[i];
    }
    int p = 20; //для него находим предков
    for(int i = 0; i <= (n - 1); i++){
        if( mother[i] == p){
            cout<<"Предок для p = "<<p<<" mother["<<i<<"] = "<<mother[i];
            if(father[i] == p)
                cout<<"Предок для p = "<<p<<" father["<<i<<"] = "<<father[i];
        }
    }
    _getch();
return 0;
}
Добавлено через 2 минуты
bradobrei, там пустое поле если введу числа например
5
5
...
потом закрывается окно
0
Продам уран 238U
 Аватар для bradobrei
126 / 125 / 127
Регистрация: 22.01.2013
Сообщений: 298
11.12.2013, 08:58
Цитата Сообщение от nikesb Посмотреть сообщение
ввел я этот код уже с cin и выдает просто пустое окно полсе того как вожу туда числа оно тупо закрывается


#include <iostream>
#include <cstdlib>
#include <conio.h>
using namespace std;
#define n 10
int main(){
int mother[n], father[n];
for(int i = 0; i < n; i++)
{
cin >> mother[i];
cin >> father[i];
}
int p = 20; //для него находим предков
for(int i = 0; i <= (n - 1); i++){
if( mother[i] == p){
cout<<"Предок для p = "<<p<<" mother["<<i<<"] = "<<mother[i];
if(father[i] == p)
cout<<"Предок для p = "<<p<<" father["<<i<<"] = "<<father[i];
}
}
_getch();
return 0;
}

Добавлено через 2 минуты
bradobrei, там пустое поле если введу числа например
5
5
...
потом закрывается окно
ну значит нет предков
1
_
317 / 151 / 27
Регистрация: 08.10.2011
Сообщений: 432
11.12.2013, 11:06
Цитата Сообщение от bradobrei Посмотреть сообщение
вообщем я сверяю p с числами в массивах мам и пап и если есть совпадение, то вывожу их
а как же деды, прадеды, прапрадеды и т.д.?

Добавлено через 59 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
using namespace std;
 
int main()
{
    const int N = 10;
    int mother[ N ] = { 0, 0, 9, 4, 5, 0, 5, 1, 1, 0 };
    int father[ N ] = { 0, 5, 5, 5, 5, 5, 5, 5, 5, 5 };
    int p;
 
    cin >> p;
 
    cout << "Предки по материнской линии (мать - бабушка - прабабушка - ...): ";
    for ( int x = p; x != mother[ x ]; x = mother[ x ] ) cout << mother[ x ] << ' ';
    cout << endl;
    cout << "Предки по отцовской линии (отец - дед - прадед - ...): ";
    for ( int x = p; x != father[ x ]; x = father[ x ] ) cout << father[ x ] << ' ';
    cout << endl;
 
    return 0;
}
1
0 / 0 / 0
Регистрация: 11.12.2013
Сообщений: 23
11.12.2013, 16:24  [ТС]
ya_noob, спасибо большое очень выручили, можете обьяснить код?) или прокоментировать где что а то я как дуб(
0
_
317 / 151 / 27
Регистрация: 08.10.2011
Сообщений: 432
11.12.2013, 19:35
nikesb, mother и father - это массивы, в которых, например, значение mother[ i ] является предком i, mother[ mother[ i ] ] является предком mother[ i ], mother[ mother[ mother[ i ] ] ] является предком mother[ mother[ i ] ] и т.д. надеюсь логика ясна. можно эти массивы рассматривать как компактное представление дерева: у корня предком является он сам (т.е. mother[ i ] == i), а у остальных i-х элементов предком является некоторое значение отличное от i. таким образом на каждом шаге в цикле присваивая i = mother[ i ] мы поднимаемся вверх по дереву до самого корня.

Добавлено через 1 час 51 минуту
что-то я накосячил, ведь кол-во предков увеличивается экспоненциально с переходом к более старшему поколению, а в текущем решении всех предков по 1 штуке, непорядок. вот исправленное решение:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <iostream>
#include <queue>
using namespace std;
 
int main()
{
    const int N = 10;
    int mother[ N ] = { 0, 0, 9, 4, 5, 0, 5, 1, 1, 0 };
    int father[ N ] = { 0, 5, 5, 5, 5, 5, 5, 5, 5, 5 };
    int p, x;
    queue< int > q;
 
    cin >> p;
 
    q.push( p );
    q.push( -1 );
    while ( true )
    {
        x = q.front(); q.pop();
        if ( x < 0 )
        {
            if ( q.empty() ) break;
            cout << "| ";
            q.push( -1 ); 
            continue;
        }
        if ( mother[ x ] != x )
        {
            cout << mother[ x ] << ' ';
            q.push( mother[ x ] );
        }
        if ( father[ x ] != x )
        {
            cout << father[ x ] << ' ';
            q.push( father[ x ] );
        }
    }
 
    return 0;
}
метка "|" и -1 в очереди указывают, что кончилось поколение предков, дальше будут предки старше (т.е. если были прямые родители, то дальше будут все бабушки и дедушки, потом все прабабушки/прадедушки и т.д.)
одни и те же предки в выводе означают, что у кого-то были одни и те же родители, кровосмешение однако
1
0 / 0 / 0
Регистрация: 11.12.2013
Сообщений: 23
25.12.2013, 09:19  [ТС]
ya_noob, помоги плиз Найти путь наименьшей длины между двумя заданными вершинами с помо щью нерекурсивного перебора с возвратом

Добавлено через 16 секунд
bradobrei, помоги плиз Найти путь наименьшей длины между двумя заданными вершинами с помо щью нерекурсивного перебора с возвратом
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.12.2013, 09:19
Помогаю со студенческими работами здесь

Генеалогическое древо. Паспортные данные членов некоторого родового клана; ссылки на детей (или на родителей). Поиск всех потомков или всех предков дл
помогите пожалуйста решить, срочно, заранее спасибо Добавлено через 2 часа 54 минуты как найти всех потомков или всех предков для...

Написать программу удаления всех элементов строки с номером k и столбца с номером 1 заданной матрицы
Написать программу удаления всех элементов строки с номером k и столбца с номером 1 заданной матрицы A, состоящей из n строк и m столбцов.

Массив: найти человека, который быстрее всех пробежал дистанцию и вывести его имя и счет
Условие Группа людей участвует в марафоне, их имена и время за которое они пробежали марафон вы можете увидеть ниже. Ваша задача найти...

Найти среднее арифметическое всех элемента массива,кроме элементов с номером от К до L включительно
Дан Массив размера N и целые числа K и L (1 &lt; K &lt;= L &lt;=N) Найти среднее арифметическое всех элемента массива,кроме элементов с номером от...

Для квартиры с указанным номером дома и номером квартиры выдать информации обо всех оплатах: тип оплаты, фио
схема: мой запрос такой: SELECT people.f_name, people.name, types_pay.com_name, payment.counter, payment.amount,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru