Запишу сначала за вас условие до конца:
Первая строка ввода содержит два числа A и B, разделенных пробелом (1 ≤ A, B ≤ 10 000 000).Выведите все возможные значения для количества емкостей по 60 литров, которые окажутся заполненными (в том числе одна возможно частично), в порядке возрастания или число −1, если значения A и B противоречат друг другу, то есть они были записаны неверно.
Теперь к вопросам по форме.
Во-первых, если в условии указаны ограничения на входные данные, им можно верить, проверять, что 1 <= A, B <= 10000000 не обязательно.
Во-вторых, научитесь пользоваться &&, ||, это позволит не дублировать код. 4 раза написанное else Console.WriteLine("-1"); не очень помогает читать.
А уже теперь по сути.
Ваше условие противоречивости условия |50A - 70B| < 50 нехорошее. Если общий объем колы, например, 141, то A = 3, B = 3, но при этом |50A - 70B| = 60, что больше 50.
Смотрю дальше.
если 50A < 70B, то если 50A не делится на 60, то ответ [(50A - 49)/60] + 1 или [50A/60] + 1 (если это одно и то же, не важно). Это тоже как минимум не очевидно: представим, что [(70B-69)/60] + 1 оказался больше, чем [(50A-49)/60] + 1. Тогда ответ точно неверен.
Какие были бы мои рассуждения:
Поищем, какое могло бы быть общее количество колы. Пусть её N, тогда
50(A - 1) < N <= 50A
70(A - 1) < N <= 70B
Тогда max(50A - 50, 70B - 70) < N <= min(50A, 70B).
Если max(50A - 50, 70B - 70) >= min(50A, 70B), то решений нет, надо выводить -1. Иначе думаем дальше.
Строгое неравенство иметь что-то не хочется, сделаем из него нестрогое. Если добавлю к левой части 1, то количество 60-литровых ёмкостей явно не поменяется, зато неравенство станет нестрогим. Пусть так и будет, раз ответ не меняется. Только в проверке равенство поменяю на строгое.
max(50A - 50, 70B - 70) + 1 <= N <= min(50A, 70B)
Теперь просто считаем число ёмкостей слева, справа, и выводим все числа от первого до второго.
Поняв всё это, просто превращаем слова в программу.
using System;
class CocaCola
{
public static void Main (string[] args)
{
int A = int.Parse(Console.ReadLine()),
B = int.Parse(Console.ReadLine());
int lowerLimit = Math.Max(50 * A - 50, 70 * B - 70) + 1;
int upperLimit = Math.Min(50 * A, 70 * B);
if (lowerLimit > upperLimit)
{
Console.Write(-1);
return;
}
for (int i = (int)Math.Ceiling(lowerLimit / 60.0); i <= Math.Ceiling(upperLimit / 60.0); i++)
Console.Write("{0} ", i);
}
}
//Pascal ABC.NET 3.1 сборка 1219
Var
s:string;
k,i:integer;
se:set of char;
begin
se:=['A','E','I','O','U','a','e','i','o','u'];
readln(s);
k:=pos('x',s);
if k<>0 then
begin
delete(s,k,1);
insert('ks',s,k);
end;
writeln(s);
k:=0;
for i:=1 to length(s) do
if s[i] in se then inc(k);
write('Percent=',k/(length(s)/100));
end.
Пример ввода:
I3artle, Caster, exported from the Throne of Heroes.
Пример вывода:
I3artle, Caster, eksported from the Throne of Heroes.
Percent=30.188679245283
Алгоритм проходит в цикле со счетчиком L по каждому разряду введенного числа Х, начиная с младших. Очередная цифра выделяется, удаваивается и полученные значения суммируются в переменной М до тех пор, пока составленное из оставшихся цифр число Х превышает M.
По условию L=3, следовательно число Х - трехзначное.
28 - это сумма удвоений, следовательно, она получена путем сложения цифр, которые в сумме дают 28/2, т.е. 14.
Исходное трехзначное число в общем виде может быть записано, как 100*a+10*b+c, тогда a+b+c=14, где b и c - целые числа от 0 до 9, а - целое число от 1 до 9.
Минимальное число, дающее в сумме 14, это 149. Но на первом шаге М получится равным 18 (9*2), и на следующем шаге оставшиеся от 149 цифры 1 и 4 дадут число 14, которое меньше М, что прекратит накопление суммы в М. Таким же образом не подходит число 158. Для числа 167 в первом проходе (число 7) получим М=14, во втором (число 6) М=14+12=26. А на третьем проходе мы получаем число 1 и накопления не происходит. То же будет и с числами 176, 185, 194. Следовательно, старший разряд числа не должен участвовать в формировании суммы и условие надо поменять на b+c=14. Но 14=9+5=8+6=7+7.
Минимальные трехзначные числа, составленные их этих цифр. это 159, 168 и 177.
Число 159 не подходит (2*9=18 > 15), 168 тоже не подходит (2*8=16 = 16) - с обоими накопление прекращается после первой цифры. Число 177 дает M=14, затем 17>14 и к М добавляется еще 14, давая в сумме 28. Далее 1<28, накопление прекращено, результат получен.
Итак, Х=177
<span>i = int(input("Введите целое число (100 000 <= x < 10 000 000): "))
z = i
mas = []<span>#масив
</span>if ( i>=100000) and (i < 10000000)<span>:
</span></span>----<span>while i>0<span>:
</span></span>--------<span>b = i%<span>10
</span></span>--------<span>i = i//<span>10
</span></span>--------<span>mas.append(b)
else<span>:
</span></span>----<span>print("Чисдл не входить в диапизон !!!")
mas.reverse()
if sum(mas[0:3]) == sum(mas[3::])<span>:
</span>----print("Сумма первых трех цифр:",sum(mas[0:3]) )
</span>----<span>print("Сумма последних трех цифр :",sum(mas[3::]))
</span>----<span>print("Число",z,'является счастливым (сумма первых трех цифр равна сумме последних трех цифр)! ')
else<span>:
</span></span>----<span>print("Число HE счасливе!")
</span>