Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Написать подпрограмму обращения строки, имеющую прототип http://www.cyberforum.ru/cpp-beginners/thread1036834.html
Символьная строка t называется обращением строки s, если ее длина равна длине строки s, а символы расположены в обратном порядке. Например, обращением строки s = “abcbc” является t = “cbcba”. Написать подпрограмму обращения строки, имеющую прототип void revers( char *s, int i, int j ); вызывающуюся как reverse( t, 0, strlen(t) ).
C++ Анализ алгоритмов почему для этого примера: tmp = a; a = b; b = tmp; О-нотация равна O(1), а не O(3) или для этого примера S = 1 + 2 + 3 + .. n = n(n + 1)/2 тоже равняется O(1)??? в книге слишком заумно объяснили http://www.cyberforum.ru/cpp-beginners/thread1036820.html
C++ Как будет выглядеть блок-схема программы? (Свой вариант внутри)
Ребят, как будет выглядеть примерно блок схема? я не очень в этом сильна, но то что у меня получилось представила, как код так и блок- схему int main(int argc, char *argv) { size_t strLen, keyLen, i, k; char str, key; char codeStr; printf("Vvedi stroku "); fgets(str, 249, stdin); printf("Key ");
Применение функций при работе с последовательностями чисел C++
Вводится последовательность из N целых элементов. Для каждого элемента последовательности вывести на экран количество цифр и количество делителей. #include <iostream> using namespace std; unsigned int Cmax(unsigned long long int P) { unsigned long long int M,Z; unsigned int max; for (int i=1, M=P; M/10>0;M/=10, Z=M)
C++ Составить функцию которая находит наибольшую сумму элементов строк матрицы http://www.cyberforum.ru/cpp-beginners/thread1036790.html
Привет. Помогите составить функцию которая находит наибольшую сумму элементов строк матрицы.
C++ Переделать массив чтобы была константа Ребят помогите переделать этот масив что бы была константа, в програмирование вообще не шарю но сейчас это очень нужно... #include <iostream> #include <iomanip> #include <cmath> int main() { int a = { {5,-3,1,5,7}, подробнее

Показать сообщение отдельно
ya_noob
_
200 / 144 / 9
Регистрация: 08.10.2011
Сообщений: 432
11.12.2013, 19:35     Найти всех предков человека с номером p
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 в очереди указывают, что кончилось поколение предков, дальше будут предки старше (т.е. если были прямые родители, то дальше будут все бабушки и дедушки, потом все прабабушки/прадедушки и т.д.)
одни и те же предки в выводе означают, что у кого-то были одни и те же родители, кровосмешение однако
 
Текущее время: 17:56. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru