Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.10.2020, 13:39   #1
krrinokk
Пользователь
 
Регистрация: 02.10.2020
Сообщений: 12
По умолчанию C++, количество дружественных пар

Помогите с программой. Вводится число n (количество пар чисел). Вводится первая пара чисел (x,y).
Находим сумму делителей каждого числа и проверяем является ли первая пара чисел дружественной, если да, то увеличиваем количество дружественных пар (k) на 1. Заново вводим новую пару чисел. В конце выводим k.
Проблема у меня в том, что k всегда остаётся равной нулю. Почему так?
Код:
#include <iostream>
#include <stdio.h>
#include <windows.h>
using namespace std;
int main()
{
    SetConsoleOutputCP(1251);
	int n, k, s, z, x, i, y;
	printf("Введите количество пар чисел (n):");
	scanf_s("%d", &n);
	printf("Введите первое число (x):");
	scanf_s("%d", &x);
	printf("Введите второе число (y):");
	scanf_s("%d", &y);
	k = 0;
	z = 0;
	s = 0;
	for (i = 1; i < n; ++i) {
		for (i = 1; i < x; ++i) {
			if (!(x % i)); 
				s += i;	
		}
		for (i = 1; i < y; ++i) {
			if (!(y % i)); 
				z += i;

		}
		if (z==x && s==y) 
			k=k+1;
		printf("Введите новое первое число (x):");
		scanf_s("%d", &x);
		printf("Введите новое второе число (y):");
		scanf_s("%d", &y);
	}
	printf("%4d\n", k);
	system("pause");
	return 0;
}

Последний раз редактировалось BDA; 02.10.2020 в 18:11.
krrinokk вне форума Ответить с цитированием
Старый 02.10.2020, 18:17   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Нельзя использовать для вложенного цикла ту же переменную-счетчик. Нужно s и z сбрасывать в ноль перед каждым поиском делителей. Последняя введенная пара не будет проверена на дружественность.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 02.10.2020, 20:50   #3
krrinokk
Пользователь
 
Регистрация: 02.10.2020
Сообщений: 12
По умолчанию

BDA,
Спасибо за ответ. Подскажите еще раз, пожалуйста. Переменную-счётчик поменяла в двух вложенных циклах. s и z обнуляются в начале основного цикла, туда же вставила и введение чисел (в условии поменяла i <= n). k все равно остается равной 0.

Код:
#include <iostream>
#include <stdio.h>
#include <windows.h>
using namespace std;
int main()
{
	SetConsoleOutputCP(1251);
	int n, k, s, z, x, i, m, y;
	printf("Введите количество пар чисел (n):");
	scanf_s("%d", &n);
	k = 0;
	for (i = 1; i <= n; ++i) {
		s = 0;
		z = 0;
		printf("Введите первое число (x):");
		scanf_s("%d", &x);
		printf("Введите второе число (y):");
		scanf_s("%d", &y);
		for (m = 1; m < x; ++m) {
			if (!(x % m)); {
				s += m;
			}
		}
		for (m = 1; m < y; ++m) {
			if (!(y % m)); {
				z += m;
			}
		}
		if (z == x && s == y) {
			k = k + 1;
		}
	}
		printf("%4d\n", k);
		system("pause");
		return (0);
	}

Последний раз редактировалось BDA; 02.10.2020 в 21:17.
krrinokk вне форума Ответить с цитированием
Старый 02.10.2020, 21:21   #4
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Точки с запятыми после условия в ифах лишние. Из-за этого в s и z копятся вообще все перебирающиеся числа.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 02.10.2020, 21:33   #5
krrinokk
Пользователь
 
Регистрация: 02.10.2020
Сообщений: 12
По умолчанию

BDA,
Спасибо Вам большое. Без Вас бы не разобралась.
krrinokk вне форума Ответить с цитированием
Старый 03.10.2020, 04:13   #6
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Пожалуйста. В следующий раз просто добавьте парочку принтов в код (если пока не умеете пользоваться отладчиком), чтобы быстрее локализовать ошибки.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Доступ к private функциям и членам класса из дружественных функций. Pein95 C++ Builder 5 04.04.2013 21:52
Разработайте алгоритм и создайте программу с использованием дружественных функций и классов YaDenis Помощь студентам 1 16.01.2013 16:20
Delphi. Программа поиска счастливых, дружественных и совершенных чисел. fan_of_lp Фриланс 13 06.07.2010 19:47
Delphi. Программа поиска счастливых, дружественных и совершенных чисел. bayda06 Помощь студентам 1 05.07.2010 18:55