У меня есть список номеров. У меня тоже есть определенная сумма. Сумма составлена из нескольких чисел из моего списка (я могу / не могу знать, из скольких чисел она сделана). Существует ли быстрый алгоритм получения списка возможных номеров? Написано на Python было бы здорово, но псевдокод тоже хорош. (Я пока не могу прочитать ничего, кроме Python: P)
Пример
list = [1,2,3,10]
sum = 12
result = [2,10]
ПРИМЕЧАНИЕ: Есть ли какой-нибудь простой способ увеличения и уменьшения холста (JavaScript)? В основном у меня есть холст размером 400x400 пикселей, и я хотел бы иметь возможность увеличить масштаб с помощью «mousedown» (2x) и вернуться назад с помощью «mouseup». Потратил последние два дня на поиск в Google, но пока не повезло. : (
Основываясь на предложении об использовании drawImage, вы также можете объединить это с функцией масштабирования.
Поэтому, прежде чем рисовать изображение, масштабируйте контекст до желаемого уровня масштабирования:
ctx.scale(2, 2) // Doubles size of anything draw to canvas.
Я создал здесь небольшой пример http://jsfiddle.net/mBzVR/4/ , в котором используется drawImage и масштабирование, чтобы увеличивать масштаб при уменьшении и уменьшении масштаба при перемещении мыши.
Если у вас есть исходное изображение или элемент холста и холст размером 400x400, который вы хотите нарисовать, вы можете использовать метод drawImage для достижения масштабирования.
Так, например, полное представление может выглядеть следующим образом
ctx.drawImage(img, 0, 0, img.width, img.height, 0, 0, canvas.width, canvas.height);
А увеличенное представление может выглядеть следующим образом
ctx.drawImage(img, img.width / 4, img.height / 4, img.width / 2, img.height / 2, 0, 0, canvas.width, canvas.height);
Первым параметром для drawImage является элемент изображения или элемент холста для рисования, следующие 4 — это x, y, ширина и высота для выборки из источника, а последние 4 параметра — это x, y, ширина и высота области для рисования на холсте. Затем он будет обрабатывать масштабирование за вас.
Вам просто нужно будет выбрать ширину и высоту для исходного образца на основе уровня масштабирования и x и y в зависимости от того, где нажата мышь минус половина расчетной ширины и высоты (но вам нужно будет убедиться, что прямоугольник не выходит за рамки).
IIRC Canvas - это растровое изображение в стиле растра. его нельзя будет масштабировать, потому что нет сохраненной информации для увеличения.
Лучше всего хранить в памяти две копии (увеличенную и не увеличенную) и менять их местами при щелчке мышью.