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

Найти все пары дружественных чисел, лежащих в диапазоне от 200 до 300 - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Посоветуйте, как практиковаться в написании кода? http://www.cyberforum.ru/cpp-beginners/thread1222477.html
В общем сабж. В ВУЗе нам объяснили теорию по С++ очень даже хорошо, но практик было очень мало. Меня беспокоит адская неуверенность, я буквально теряюсь, когда сажусь писать код. Поэтому лабы, и вообще что угодно пишу оченнь медленно.. Чувствую себя ущербным каким-то... Что можете посоветовать? Какие годные книги есть именно по практике?
C++ Разбить исходный текстовый файл на страницы заданной длины и ширины Составить программу, разбивающую исходный текстовый файл на страницы заданной длины и ширины. Результат выводится на экран. Подскажите функции,с помощью которых можно сделать.) http://www.cyberforum.ru/cpp-beginners/thread1222474.html
Является ли строка палиндромом C++
Проверить,является ли строка палиндромом. Прокоментируйте строки пожалуйста
C++ Посчитать частоту с которой каждая буква встречается
Ввести фамилию. Посчитать частоту с которой каждая буква встречается, заполнить массив из этих частот. Используя контейнер vector. Если можно то с комментарием всех строк !
C++ Из Java в С++ (алгоритм А* для поиска кратчайшего пути до терминального состояния) http://www.cyberforum.ru/cpp-beginners/thread1222444.html
Помогите реализовать алгоритм *А для плюсов package ru.dokwork.algorithms.astar; import java.util.*; /** * Реализует алгоритм поиска решения А*. */ public class Astar <TState extends State, TRules extends Rules<TState>> { /** * Применяет алгоритм А* для поиска крадчайшего пути до терминального * состояния от указанного. * * @param startState - начальное состояние. * @return...
C++ В двумерном динамическом массиве найти максимум в каждой строке В двумерном динамическом массиве найти максимум в каждой строке. Функции реализовать, как шаблоны Заранее спасибо! подробнее

Показать сообщение отдельно
_Лето_
1 / 1 / 0
Регистрация: 03.11.2013
Сообщений: 68
04.07.2014, 13:46     Найти все пары дружественных чисел, лежащих в диапазоне от 200 до 300
Нужно найти все пары дружественных чисел, лежащих в диапазоне от 200 до 300
Почему-то выдает другие числа. Пожалуйста, проверьте

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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#include <iostream>
#include <cmath>
using namespace std;
void swapRange(int &, int &);
int propDivisors(int);
int amicPairs(int, int);
int main()
{
        int rangeA;
        int rangeB;
        int numPairs;
        cout << "Input the start of the range: ";
        cin >> rangeA;
        cout << "Input the end of the range: ";
        cin >> rangeB;
        if (rangeA > 0 && rangeB > 0){
            if (rangeA > rangeB){
                cout << "End of range < start of range -- swapping values" << endl;
                swapRange(rangeA, rangeB);
            }
            numPairs = amicPairs(rangeA, rangeB);
            cout << "Range of numbers: " << rangeA << "-" << rangeB << endl;
            cout << "The number of Amicable Pairs is: " << numPairs << endl;
        }
    else{
            cout << "Unable to check non-positive values";
            cout << "Exiting" << endl;
    }
}
int propDivisors(int num){
        int sum = 0;
        int fac = 0;
    for (int k = 2; k < num; k++){
        if ((num % k) == 0){
                fac = k;
                sum += fac;
        }
    }
        return sum;
}
void swapRange(int &rangeA, int &rangeB){
        int x;
    if (rangeA > rangeB){
            x = rangeA;
            rangeA = rangeB;
            rangeB = x;
    }
        return;
}
int amicPairs(int A, int B){
        int i;
        int k;
        int counter;
    for (i = A; i < B; i++){
        for (k = B; k > A; k--){
            if (propDivisors(i) == k && i == propDivisors(k) && i != k){
                    cout << i << " and " << k << " are Amicable Numbers." << endl;
                    counter++;
            }
        }
    }
        return counter;
}
Видел еще один код, он короче, чем мой, но его я не понимаю совсем. Но он хотя бы работает. Сможете объяснить его?

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
#include <iostream>
 
typedef unsigned long long ull_t;
 
ull_t sum_of_divs(ull_t);
bool is_friendly(ull_t, ull_t);
 
int main()
{
    const ull_t left = 1;
    const ull_t right = 10000;
 
    for (ull_t num1 = left; num1 <= right; ++num1)
        for (ull_t num2 = num1 + 1; num2 <= right; ++num2)
            if (is_friendly(num1, num2))
                std::cout << num1 << "\t" << num2 << std::endl;
 
    return 0;
}
 
ull_t sum_of_divs(ull_t number)
{
    ull_t sum = 0;
 
    for (ull_t d = 1; d < number / 2 + 1; ++d)
        if (number % d == 0)
            sum += d;
 
    return sum;
}
 
bool is_friendly(ull_t number1, ull_t number2)
{
    return sum_of_divs(number1) == number2 && sum_of_divs(number2) == number1;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 01:11. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru