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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Sylar9
-20 / 55 / 2
Регистрация: 04.09.2011
Сообщений: 1,927
Записей в блоге: 1
#1

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

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

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

Справка:

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

НЕ могу понят в чем суть задачи
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.07.2012, 16:08
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Алгоритм(Найти максимальное совершенное число, которое в то же время меньше введенного N) (C++):

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

Найти максимальное число которое может быть представлено как сумма степеней 2, 3 и 4 простых чисел - C++
Найти максимальное число, меньшее заданного, которое может быть представлено как сумма степеней 2, 3 и 4 простых чисел (минимальное такое...

Найти максимальное число, которое расположено ниже главной и ниже обратной диагонали - C++
Дана квадратная матрица целых чисел размером N<=12. Заполнить матрицу случайными числами от 0 до 100. Найти максимальное число,...

Найти максимальное число, которое расположено ниже главной и ниже обратной диагонали - C++
Дана квадратная матрица целых чисел размером N<=12. Заполнить матрицу случайными числами от 0 до 100. Найти максимальное число,...

Передать в функцию целое число. Функция заменяет его на ближайшее простое число, которое больше или меньше исходного. Вернуться в main( ) и распечатат - C++
Передать в функцию целое число. Функция заменяет его на ближайшее простое число, которое больше или меньше исходного. Вернуться в main( ) и...

Напечать число, которое меньше максимального элемента,но больше всех остальных элементов - C++
Составить программу,которая в массиве A находит второе по величине число(вывести на печать число,которое меньше максимального элемента...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
MAnton
23 / 23 / 1
Регистрация: 21.04.2011
Сообщений: 139
14.07.2012, 16:28 #2
Пишешь функцию которая возвращает указатель на массив делителей числа.
C++
1
int* Delitel(int* mas, int M);
потом тебе в цикле надо пройти все числа от N-1 до 2. для каждого числа вызываешь функцию Delitel, получаешь массив чисел, находишь сумму этого массива, если сумма равна числу то выходишь из цикла, если нет то на идешь на следующий шаг цикла
0
Sylar9
-20 / 55 / 2
Регистрация: 04.09.2011
Сообщений: 1,927
Записей в блоге: 1
14.07.2012, 17:31  [ТС] #3
Цитата Сообщение от MAnton Посмотреть сообщение
Пишешь функцию которая возвращает указатель на массив делителей числа.
C++ (Qt)
1
int* Delitel(int* mas, int M);
потом тебе в цикле надо пройти все числа от N-1 до 2. для каждого числа вызываешь функцию Delitel, получаешь массив чисел, находишь сумму этого массива, если сумма равна числу то выходишь из цикла, если нет то на идешь на следующий шаг цикла
малеха не понял
0
MAnton
23 / 23 / 1
Регистрация: 21.04.2011
Сообщений: 139
14.07.2012, 18:12 #4
что конкретно не понятно?
0
Sylar9
-20 / 55 / 2
Регистрация: 04.09.2011
Сообщений: 1,927
Записей в блоге: 1
14.07.2012, 18:15  [ТС] #5
Цитата Сообщение от MAnton Посмотреть сообщение
что конкретно не понятно?
как создать функции, и как проверять
0
Toshkarik
1141 / 858 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1
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
MAnton
23 / 23 / 1
Регистрация: 21.04.2011
Сообщений: 139
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
David Sylva
1286 / 948 / 51
Регистрация: 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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.07.2012, 18:44
Привет! Вот еще темы с ответами:

Определить ближайшее нечетное число меньше заданного числа N, которое делится на 15 с остатком 6 - C++
Определить ближайшее нечетное число меньше заданного числа N, которое делится на 15 с остатком 6

Определить ближайшее нечетное число меньше заданного числа N, которое делится на 15 с остатком 6 - C++
задание такое: Определить ближайшее нечетное число меньше заданного числа N, которое делится на 15 с остатком 6. вот код-BORLANDC ...

Найти элементы, которые по модулю меньше некоторого значения, введенного с клавиатуры - C++
задано матрицу размерностью N * M с произвольным многочисленных элементов. Найти элементы, которые по модулю меньше некоторого значения,...

Найти максимальное из натуральных чисел, не превышающих 5000, которое нацело делится на 39 - C++
Найти максимальное из натуральных чисел, не превышающих 5000, которое нацело делится на 39.


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
14.07.2012, 18:44
Ответ Создать тему
Опции темы

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