Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

что не так в моем коде? почему он не выводит ответ О_О с++

kotolanchik Профи (831), закрыт 4 года назад
Даны натуральные числа n и m. Найти все пары дружественных чисел, лежащих в диапазоне от n до m. Два числа называются дружественными, если каждое из них равно сумме всех делителей другого (само число в качестве делителя не рассматривается).

#include
using namespace std;

int deliteli(int a);

int main()
{
cout << "[n,m]:"; int n, m; cin >> n >> m;

for (; n <= m; n++)
{
for (; n <= m; m--)
{
int a = deliteli(n), b = deliteli(m);
if (n == b || m == a) { cout << n << m; }
}
}

}

int deliteli(int a)
{
int summ = 0;
for (int i = 1; i < a; i++)
{
int rodjer = a % i;
if (rodjer == 0) { summ++; }

}
return summ;
}
Дополнен 4 года назад
Лучший ответ
Дмитрий Карекута Ученик (149) 4 года назад
в строке #include не написан журнал или как его там. Короч, надо нписать что то типа #include
kotolanchikПрофи (831) 4 года назад
он написан
не скопировался почему-то
kotolanchikПрофи (831) 4 года назад
ща скрин скину, чтобы понятнее было, как выглядит код
Дмитрий КарекутаУченик (149) 4 года назад
ого, у меня тоже не пишется в комменте
... Гений (84839) Это парсер mail.ru режет всё что похоже на HTML теги. Добро пожаловать =) Либо ставить с пробелами, либо использовать & lt; и & gt;
Остальные ответы
... Гений (84839) 4 года назад
Как минимум Вы считаете кол-во делителей, а не их сумму

P.S: summ++, а должно быть видимо summ+=i;
kotolanchikПрофи (831) 4 года назад
там сумма делителей без самого числа считается
я в этом уверен
... Гений (84839) И что делает summ++? =)
Xaker_Two Мыслитель (5038) 4 года назад
1 - у вас не сумма делителей а их количество (summ += i будет суммой)
2 - оба цикла не верны т. к. вы изменяете лимиты которые вы трогать не должны вот вам пошаговая сокращенная отладка

n = 2
m = 4
//первый прогон
2 < 4
__//первый прогон влОженки
__2 < 4
____todo
__//второй прогон влОженки
__2 < 3
____todo
__//третий прогон влОженки
__2 < 2 //выход
//второй прогон
3 < 2 //выход

вы понимаете что творите?

3 - сделайте вывод пар (независимо от истиности условия) и если условие истино то рядом то что это дружественная пара

вот вам корректный цикл (вроде) для перебора пар без повторения когда 2-3 и 3-2 считаются одним и тем же

for(int i = n; i < m; i++)
for(int j = i; j < m; j++)
{
//todo
}
Похожие вопросы