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

Рекурсия, совершенные числа - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Как записать структуру в файл с помощью fstream? http://www.cyberforum.ru/cpp-beginners/thread544620.html
доброго времени суток, нужна ваша помощ. припустим у нас есть структура: struct group { char name; int k; }st; как ейо записать и считать з потока fstream..
C++ Чтение данных из строки заданного вида Входной файл содержит строки с постановками задач вида:N=4, S=3, R: 2, 3, 1 N=9, S=4, R: 5, 3.2, 8, 5.5Каким образом можно занести числа в переменные N, S и массив R? http://www.cyberforum.ru/cpp-beginners/thread544617.html
C++ Добрый вечер!!! Не могу из DataGridView SaveFileDialog'ом сохранить данные в базу...
Добрый вечер!!! Не могу из DataGridView с помощью SaveFileDialog сохранить данные в базу. При загрузке формы данные загружаются нормально, при открытии БД OpenSaveDialog'ом тоже открывает корректно. Но вот сохранить никак не получается. Допустим, ввожу новые данные в DataGridView, и их надо сохранить с тем же именем таблицы, но уже в новой БД, т.е. надо создать новую БД, с таким же именем...
Переписать с Паскаля в с++ C++
Помогите пожалуйста - переделать программу на с++ с использованием структур - очень прошу всех откликнуться... type student=record imy:string; fam:string; otch:string; first:byte; second:byte; third:byte; foer:byte;
C++ Графика winBGI в среде программирования dev-c++ http://www.cyberforum.ru/cpp-beginners/thread544577.html
Есть ли стандартная функция, которая позволила бы вставить картинку? И если можно подскажите какую-нибудь литературу по графике winBGI на русском языке
C++ Стек и очередь; хеш-таблица (помогите) Разработать подпрограммы, которые обеспечивают запросы на запись или чтение данных из очереди, стека или дека. Для организации указанных структур использовать массивы или списки. Проверить работоспособность разработанных подпрограмм. Последовательность выполнения операций записи или чтения выбираются случайно. Сравнить результаты работы, сделать выводы. Задание : Разработать подпрограммы... подробнее

Показать сообщение отдельно
Neys
-1 / 0 / 0
Регистрация: 27.10.2009
Сообщений: 14
11.04.2012, 21:36  [ТС]     Рекурсия, совершенные числа
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
41
42
43
44
45
46
47
48
49
#include <iostream>
#include <iomanip>
 
using namespace std;
 
int lim, sum = 0, count = 0;
int mas[100];
 
bool is_perfect(int num)
{
    for(int i = lim; i >= 1; i--)
    {
        bool fl = true;
        for(int j = 0; j < count; j++)
            if(mas[j] == i)
                fl = false;
 
        if((num % i == 0) && (lim >= 1) && fl)
        {
            count++;
            sum += i;
            cout << left << setw(13) << lim << setw(17) << i << sum << endl;
            mas[count] = i;
            lim = i - 1;
            
            is_perfect(num);
            break;
        }
    }
    return sum == num;   
}
 
void main()
{
    setlocale(0, "");
 
    int number;
    cout << "Введите число: ";
    cin >> number;
 
    lim = number / 2;
 
    cout << "Считаем от |" <<  " Нашли делитель |" << " Сумма делителей"  << endl;
 
    if(is_perfect(number))
        cout << endl << "Число совершенное." << endl;
    else
        cout << endl << "Число совершенным не является." << endl;
}
Добавлено через 13 минут
Не успел подправить в нормальный вид, отвлекся.
Как итог: проходим меньшее кол-во чисел в поисках делителей + желанная рекурсия.
Для чисел 6, 28, 496, 8128, 33550336 работает как надо.

Добавлено через 7 минут
Лучше не читайте этот бред. Я понял, что сделал просто дохрена лишнего и нафиг так надо.

Добавлено через 46 минут
Разобрался, что было лишнее, сделал по схеме:
глобальная переменная lim, в мэйне задаем lim = num/2, вызываем функцию
ищем по убыванию от lim до 1
нашли делитель: lim = делитель - 1; sum += делитель; цикл break;
если lim > 1 вызываем рекурсивно функцию,
иначе возвращаем sum == num.

т.е. рекурсия получилась искусственная, если убрать её одновременно с break, будет то же самое
т.к. будут в цикле искаться и другие делители, причем так же от уменьшенного lim.

есть у кого идеи получше/попроще?
 
Текущее время: 04:22. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru