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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.08.2010, 23:33   #1
azusdex
 
Регистрация: 14.08.2010
Сообщений: 3
Печаль Разложение числа на 3 слогаемых

Дана задача: пользователь вводит число и программа должна разложить его на 3 слагаемых, во всех возможных вариантах. Слагаемые не должны повторятся, и не должны повторятся суммы, т.е. если пользователь вводит 10 то программа пишет:
1+2+7
6+3+1
5+3+2
1+4+5
Три дня сижу не как не выходит, есть:

void main(){
int a, n = 0, m = 0;
int i1, i2, i3;
int i1copy[100], i2copy[100], i3copy[100];

scanf_s("%d", &a); //пользователь вводит число

//здесь прогоняются все возможные варианты и заганяются в массивы уже отсортированны от повторения цифр
for(i1 = 1; i1 < a; i1++)
for(i2 = 1; i2 < a; i2++)
for(i3 = 1; i3 < a; i3++){
if(i1+i2+i3 == a && i1 != i2 && i1 != i3 && i2 != i3){
i1copy[n] = i1;
i2copy[n] = i2;
i3copy[n] = i3;
n++;
m = n;
}//if
}//for


}

уже пробавал создать еще один for для сравнения, но сравнений что то больно много и не выходит, кто то знает, хоть идейку какую нибудь?
буду очень признателен
azusdex вне форума Ответить с цитированием
Старый 15.08.2010, 00:08   #2
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

Код:
#include <stdio.h>

int main()
{
	int num;
	int i, j, k;

	scanf("%d", &num);

	if (num < 6) {
		printf("none\n");
		return 0;
	}

	for (i = 1; i < num; i++) {
		for (j = i + 1; j < num; j++) {
			for (k = j + 1; k < num; k++) {
				if (i + j + k == num) {
					printf("%d + %d + %d = %d\n", i, j, k, num);
				}
			}
		}
	}

	return 0;
}
как то так. минимальное возможное число, которое можно разложить по твоему закону это 6 (1 + 2 + 3). собсна меньше его проверять нет смысла
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 15.08.2010, 00:22   #3
azusdex
 
Регистрация: 14.08.2010
Сообщений: 3
По умолчанию

Чувак ты гений!!!!
куда слать пивас????

ток вот немогу понять в чем подвох, где сравнение???
и как это правельно, я так делал и у меня не получалось!
azusdex вне форума Ответить с цитированием
Старый 15.08.2010, 00:31   #4
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

2azusdex
сравнение нужно только суммы слагаемых, проверки на одинаковые элементы не требуется, ибо я иду по последовательностям относительно предыдущей. т.е
Код:
for (i = 1; i < num; i++) {
		for (j = i + 1; j < num; j++) {
			for (k = j + 1; k < num; k++) {
				if (i + j + k == num) {
					printf("%d + %d + %d = %d\n", i, j, k, num);
				}
			}
		}
	}
одинаковых элементов просто не будет)
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Разложение числа на множители spamer Общие вопросы Delphi 5 01.01.2009 12:32
Разложение числа на простые делители PROFI_I Общие вопросы Delphi 2 09.12.2008 18:17
Разложение числа на простые множители artem_MG Паскаль, Turbo Pascal, PascalABC.NET 3 24.10.2008 19:28
Разложение числа на слагаемые Oleg-vp Общие вопросы Delphi 5 30.10.2007 10:43