[#] Циклы
vit01(mira, 1) — All
2015-12-04 04:13:31


Возьмем, например, такое уравнение: 5x + 10y + 15z = 100. Какие значения
должны иметь переменные x, y, z, чтобы уравнение было верным (т. е. каковы
корни уравнения)? Они могут быть такими: x = 1, y = 8, z = 1. Или такими: x =
4, y = 2, z = 4. Становится понятно, что корней у подобных уравнений может
быть множество.
Требуется написать программу, выводящую на экран все возможные корни уравнения
вида ax + by + cz = d, где a, b, c, d - коэффициенты (известны), а x, y, z -
переменные (требуется найти). При этом пусть все числа должны быть
натуральными числами (т. е. > 0).
Решается данная задача методом перебора всех возможных значений x, y, z с
учетом их коэффициентов. Так если a = 10 и d = 100, то x может принять
значения от 1 до 10, т.к. 10 * 10 = 100.
    # Найти все возможные корни уравнения вида
    # ax + by + cz = d, где a, b, c, d - задаются,
    # x, y, z - требуется найти.
    # Все числа (коэффициенты и переменные) - натуральные числа (т.е. > 0).
    d = int(input('s = '))
    a = int(input('a = '))
    b = int(input('b = '))
    c = int(input('c = '))
    for i in range(1,d//a):
    	for j in range(1,d//b):
    		for k in range(1,d//c):
    			if i*a + j*b + k*c == d:
    				print("%d*%d + %d*%d + %d*%d = %d" % (a,i,b,j,c,k,d))
Пример выполнения кода:
    s = 20
    a = 2
    b = 4
    c = 6
    2*1 + 4*3 + 6*1 = 20
    2*2 + 4*1 + 6*2 = 20
    2*3 + 4*2 + 6*1 = 20
    2*5 + 4*1 + 6*1 = 20
Обычно данную задачу приводят в ином контексте. Требуется найти, сколько
различных (трех видов) товаров можно купить на определенную сумму.
    summa = int(input("Сколько у вас денег? "))
    subj1 = int(input("Цена экземпляра товара 1: "))
    subj2 = int(input("Цена экземпляра товара 2: "))
    subj3 = int(input("Цена экземпляра товара 3: "))
    for i in range(1, summa // subj1):
    	for j in range(1,summa // subj2):
    		for k in range(1,summa // subj3):
    			if subj1 * (i) + subj2*(j)+subj3*(k) == summa: 
    				print(i,j,k)
Пример выполнения кода:
    Сколько у вас денег? 100
    Цена экземпляра товара 1: 10
    Цена экземпляра товара 2: 20
    Цена экземпляра товара 3: 30
    1 3 1
    2 1 2
    3 2 1
    5 1 1
При этом если ставится условие, чтобы всего количество предметов равнялось
какому-то числу или было не меньше какого-то числа, то в условии инструкции if
следует через логический оператор and добавить второе условие (например, a + b
+ c > 5).