Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
136 / 57 / 13
Регистрация: 04.09.2011
Сообщений: 1,956
Записей в блоге: 1
1

Алгоритм(Найти максимальное совершенное число, которое в то же время меньше введенного N)

14.07.2012, 16:08. Просмотров 1557. Ответов 7
Метки нет (Все метки)

Найти максимальное совершенное число, которое в то же время меньше введенного N

Справка:

Число называется совершенным, если оно равно сумме всех своих делителей за исключением его самого

НЕ могу понят в чем суть задачи
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.07.2012, 16:08
Ответы с готовыми решениями:

Функция: найти максимальное совершенное число в последовательности
помогите....надо вывести самое большое совершенное число............ #include <iostream> #include...

Найти максимальное совершенное число в последовательности
Вводится последовательность из N целых чисел. Найти максимальное совершенное число в...

Дано натуральное число. Заменить любую из его цифр так, чтобы получилось максимальное совершенное число.
Дано натуральное число N. Если это сложно, заменить любую из его цифр (только одну) так, чтобы...

Найти случайное число которое больше 0 и меньше 1
Найти случайное число которое больше >0 и меньше <1. Если число меньше <0.5 программа должна...

7
25 / 25 / 5
Регистрация: 21.04.2011
Сообщений: 141
14.07.2012, 16:28 2
Пишешь функцию которая возвращает указатель на массив делителей числа.
C++
1
int* Delitel(int* mas, int M);
потом тебе в цикле надо пройти все числа от N-1 до 2. для каждого числа вызываешь функцию Delitel, получаешь массив чисел, находишь сумму этого массива, если сумма равна числу то выходишь из цикла, если нет то на идешь на следующий шаг цикла
0
136 / 57 / 13
Регистрация: 04.09.2011
Сообщений: 1,956
Записей в блоге: 1
14.07.2012, 17:31  [ТС] 3
Цитата Сообщение от MAnton Посмотреть сообщение
Пишешь функцию которая возвращает указатель на массив делителей числа.
C++ (Qt)
1
int* Delitel(int* mas, int M);
потом тебе в цикле надо пройти все числа от N-1 до 2. для каждого числа вызываешь функцию Delitel, получаешь массив чисел, находишь сумму этого массива, если сумма равна числу то выходишь из цикла, если нет то на идешь на следующий шаг цикла
малеха не понял
0
25 / 25 / 5
Регистрация: 21.04.2011
Сообщений: 141
14.07.2012, 18:12 4
что конкретно не понятно?
0
136 / 57 / 13
Регистрация: 04.09.2011
Сообщений: 1,956
Записей в блоге: 1
14.07.2012, 18:15  [ТС] 5
Цитата Сообщение от MAnton Посмотреть сообщение
что конкретно не понятно?
как создать функции, и как проверять
0
1172 / 885 / 94
Регистрация: 03.08.2011
Сообщений: 2,455
14.07.2012, 18:35 6
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
int main () {
   unsigned long int N,
                     summ,
                     perfectNumber = 0;
   
   std::cout << "Enter N: ";
   std::cin >> N;
   
   for ( unsigned long int i = 2; i < N; i++ ) {
      summ = 0;
      
      for ( unsigned long int j = 1; j < i; j++ )
         if ( i % j == 0 )
            summ += j;
      
      if ( summ == i )
         perfectNumber = i;
   }
   
   std::cout << perfectNumber << std::endl;
   
   return 0;
}
0
25 / 25 / 5
Регистрация: 21.04.2011
Сообщений: 141
14.07.2012, 18:43 7
Что бы найти максимальное совершенное число, тебе надо перебрать все числа от N-1 до 2. Перебирать числа нужно с конца, потому что первое попавшееся совершенное число будет максимальным совершенным числом которое меньше N. На каждой итерации цикла будем использовать вспомогательную функцию, которая будет для каждого числа формировать массив делителей эта функция будет выглядеть примерно так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int* Delitel(int *mas, int M){
    delete []mas;
    mas=new int[M/2];
    int i=M/2;
    int j=0;
    while(i>=2){
        if(M%i==0){
            mas[j]=i;
            j++;
        }
        i--;
    }
    return mas;
}
потом вычисляешь сумму этого массива если она не равна числу то идем дальше, если равна то выходим из цикла.
0
1311 / 973 / 267
Регистрация: 17.05.2012
Сообщений: 2,687
14.07.2012, 18:44 8
Мой кривенький вариант
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
#include <iostream> 
using namespace std; 
int main() 
{   
    setlocale(0, "rus");
    int N; 
    int sum = 0; 
    int max = 0;
    cout << "Введите N " << endl; 
    cin >> N; 
 
    for ( int i = 2; i < N; i++)  
    { 
        for ( int j = 1; j <= ( i / 2); j++) 
        { 
            if( i % j == 0) 
                sum += j;  // считаем сумму делителей
        } 
        if(sum == i)   // если сумма равна
        {
            cout << "Совершенное число " << i <<  endl; 
           if( max < i ) 
               max = i;   // максимальное
        } 
        sum = 0; // сбрасываем сумму
        
    }  
 
    if( max == 0) // если макс 0 нет чисел
        cout << "Нет совершенных чисел " << endl; 
    else 
        cout << "Максимальное из совершенных " << max << endl;
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.07.2012, 18:44

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Циклы: найти в массиве максимальное число, которое повторяется
Добрый вечер. Запутался совсем с этими массивами.. Так прошу помощи. В этом коде, нужно найти...

Найти натуральное число, которое в пять раз меньше суммы предшествующих
Найти натуральное число которое : 1) В пять раз меньше суммы предшествующих ему натуральных чисел;...

Найти максимальное число в матрице, которое повторяется не более одного раза
Var a:array Procedure TForm1.Button1Click Var max,j,i,k,s:integer; Begin ...

Найти максимальное число которое можно составить из цифр заданного числа
Задано четырехзначное число. Нужно написать программу, которая находит самое большое четырехзначное...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.