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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.08.2014, 18:03   #1
Demius
Пользователь
 
Регистрация: 03.12.2012
Сообщений: 24
По умолчанию Набрать сумму (Pascal, C++)

Даны два числа N и K (N < K). Необходимо вывести некоторые числа от 1 до N, чтобы, сложив их, получить K.

Например, для N = 8, K = 13 ответ будет 2, 3, 8.
Demius вне форума Ответить с цитированием
Старый 20.08.2014, 18:13   #2
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Ну это классическая задача о ранце, разве нет?
Решения можно найти готовые, только числа свои подставить. На википедии 99% есть решение.
rrrFer вне форума Ответить с цитированием
Старый 20.08.2014, 23:22   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Ну это классическая задача о ранце, разве нет?
на мой взгляд, это не совсем ранец!

хотя, дьявол, конечно, кроется в деталях..
Например, что значит "вывести некоторые числа" ?
Они могут повторяться? Сколько числе может/должно быть?

вот, например:
Цитата:
Например, для N = 8, K = 13 ответ будет 2, 3, 8.
а почему не 6+7 или не 5+8 или не 1+2+3+7 ?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 21.08.2014, 06:32   #4
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Цитата:
на мой взгляд, это не совсем ранец!

хотя, дьявол, конечно, кроется в деталях..
Разновидностей ранцев десятки. Суть не меняется. Ну разве что жадный ранец с сыпучими продуктами решается проще xD.
rrrFer вне форума Ответить с цитированием
Старый 21.08.2014, 06:44   #5
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,679
По умолчанию

Еще какой жадный. https://ru.wikipedia.org/wiki/%D0%97...BD%D1%86%D0%B5
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!
Bugrimov вне форума Ответить с цитированием
Старый 21.08.2014, 06:56   #6
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Bugrimov
К чему эта ссылка?
rrrFer вне форума Ответить с цитированием
Старый 21.08.2014, 07:23   #7
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,679
По умолчанию

Возможно Demius не знает ничего о рюкзаках, из это ссылки он подчеркнет немного инфы. К чему вопрос?
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!
Bugrimov вне форума Ответить с цитированием
Старый 21.08.2014, 08:21   #8
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Цитата:
а почему не 6+7 или не 5+8 или не 1+2+3+7 ?
А какая разница?
Если задача сдается препу, то он примет любой вариант, если бездушной машине, то там есть чекер(наверное)

Я бы придрался к повторам и выводил 1-ки т.к. про отсутствие повторов ничего не сказано
Poma][a вне форума Ответить с цитированием
Старый 21.08.2014, 11:17   #9
Demius
Пользователь
 
Регистрация: 03.12.2012
Сообщений: 24
По умолчанию

Нам даны числа 1, 2, 3, ..., n, и k. Нам нужно набрать из чисел [1; n] сумму, равную k. При этом брать некоторое число более одного раза нельзя.

И если уж на то пошло, то вывести можно любой вариант, проверяет чекер.

Если честно, то это лишь часть от задачи. Если хотите прочитать полное условие - напишите. Опишу также алгоритм до данной подзадачи (достаточно простой).

Последний раз редактировалось Demius; 21.08.2014 в 11:29.
Demius вне форума Ответить с цитированием
Старый 21.08.2014, 14:40   #10
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Код:
var
	w : array [0..1000] of Integer;
	a : array [0..1000, 0..10000] of Integer;
	n, m, i, j : Integer;

begin
	ReadLn(n, m);
	for i := 1 to n do
		w[i] := i;

	for i := 1 to n do
		for j := 0 to m do begin
			a[i, j] := a[i-1, j];
			if (w[i] <= j) and (a[i, j] < a[i-1, j-w[i]]+w[i]) then a[i, j] := a[i-1, j-w[i]]+w[i];
		end;

	i := n; j := m;

	while i*j > 0 do begin
		if a[i, j] <> a[i-1, j] then begin
			Write(i, ' ');
			j := j-w[i]
		end;

		Dec(i)	
	end
end.
Poma][a вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Найти сумму ряда (pascal) loctar Помощь студентам 3 05.06.2014 00:38
Набрать сумму чисел (Delphi) d3qoot Помощь студентам 6 18.03.2012 13:23
Pascal. Найти сумму отрицательных и сумму положительных элементов линейного массива. badname47 Паскаль, Turbo Pascal, PascalABC.NET 1 07.02.2012 06:29
Задача на паскале (набрать заданную сумму денег) Старый Gilbert Помощь студентам 4 21.03.2011 15:12
Как набрать массу? Shorgeornache Свободное общение 34 20.07.2010 03:21