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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.06.2016, 20:22   #1
My_Number245
Пользователь
 
Регистрация: 07.06.2016
Сообщений: 19
По умолчанию Задача на перебор сумм последовательности (C++)

Здравствуйте, уважаемые форумчане. Попалась мне одна интересная математическая задача, которую я захотел решить с помощью компьютера, а именно: заставить его быстро перебрать все возможные комбинации и выдать ответ. Текст задачи примерно такой:Дана последовательность чисел от 1 до 27 включительно. За один ход можно убрать из нее 3 любых числа, сумма которых больше 53. В ходах не должно быть одинаковых сумм. Найти наибольшее число ходов Написал программу, она выдает, как я и полагал, 4. Теперь прошу вас как опытных программистов-математиков, проверьте на правильность код и оцените его качество или решите задачу и разъясните решение. 2 день не дает покоя эта задача, интересно, решил правильно или нет. Заранее спасибо

Вот сам код:

Код:
#include<stdio.h>
#include<conio.h>
int mxlvl = 0;
void BoolNull(bool a[])
{
	for(int i=1;i<28;i++)
	   a[i] = true;
}
bool FindSum(int a[], bool b[], int sum, int lvl)
{
	if(lvl > mxlvl)
	   mxlvl = lvl;
	bool tmp[28], flg = false;
	int i, j, k;
	for(i=1;i<28;i++)
	   tmp[i] = b[i];
	for(i=1;i<28;i++)
	{
		for(j=i+1;j<28;j++)
		{
			for(k=i+2;k<28;k++)
			{
				if((i != j) && (i !=k ) && (j != k) && b[i] && b[j] && b[k])
					if(a[i] + a[j] + a[k] == sum)
					{
						tmp[i] = false;
						tmp[j] = false;
						tmp[k] = false;
						flg = true;
						if(!FindSum(a, tmp, sum+1, lvl+1)) return false;
					}
			}
		}
	}
	return flg;
}
int main()
{
	int a[28], i;
	bool b[28];
	BoolNull(b);
	for(i=1;i<28;i++)
	   a[i] = i;
	for(i=100;i>53;i--)
	{
		FindSum(a, b, i, 0);
	}
	printf("%d\n", mxlvl);
	getch();
}

Последний раз редактировалось My_Number245; 07.06.2016 в 20:27. Причина: Проблемы с кодировкой в комментариях
My_Number245 вне форума Ответить с цитированием
Старый 07.06.2016, 20:24   #2
My_Number245
Пользователь
 
Регистрация: 07.06.2016
Сообщений: 19
По умолчанию

Извиняюсь за отсутствие комментариев в коде, их пришлось убрать, т.к тут они отображаются некорректно. Где непонятно пишите, поясню

Последний раз редактировалось My_Number245; 07.06.2016 в 20:32.
My_Number245 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
последовательности, перебор Alenka_r Помощь студентам 0 26.04.2016 15:11
Перебор последовательности динамической длины. (важно) juky88 Общие вопросы C/C++ 2 17.04.2011 12:21
Pascal в последовательности сумм найти первую сумму, не превосходящую число В mrRastom Помощь студентам 4 10.03.2011 16:03
Перебор всех возможных сумм элеметов массива Sanakan Помощь студентам 3 29.03.2010 00:28
Задача в С++ про вычисление сумм Many man Помощь студентам 2 14.12.2008 01:19