Это будет бесконечно, если два числа никогда не подходят друг к другу.
a
всегда увеличивается на 1, b
всегда уменьшается на 1
Первый случай:
A == B
второй случай:
Если они оба положительны то они будут равны друг другу, если b
не менее чем на 2 больше, чем a
и сумма a
и b
делится на 2: Итак, второе условие:
(ба)> = 2 & & ((Ь + а)% 2 == 0)
третий случай:
Оба отрицательные, поэтому a
будет увеличиваться, а b
будет меньше. Это же правило применяется как второй случай, но мы принимаем абсолютное значение, поэтому мы можем сделать второй случай таким образом, и он будет работать как для 2-го, так и для третьего случая:
(abs (b) -abs (a))> = 2 & & ((абс (б) + ABS (а)% 2 == 0)
4-ый Корпус:
a
является отрицательным и положительным b
является: Они будут равны, если сумма абсолютного значения от a
и b
делится на 2:
(абс (а) + б)% 2 == 0
пятого корпуса:
a
является положительным и отрицательным b
является: a
будет увеличиваться и уменьшаться b
будет, как это на числовой прямой:
<- b a ->
<---------|---------->
Поскольку они уходят друг от друга, они никогда не будут равны.
Все случаи с C# код:
bool isInfiniteProcess(int a, int b) {
// Case 1
if(b == a)
return false;
// Case 2 and 3
bool bothNegative = (a < 0 && b < 0);
bool bothPositive = (a > 0 && b > 0);
if (bothNegative || bothPositive) {
if((Math.Abs(b) - Math.Abs(a)) >= 2 && ((Math.Abs(b) + Math.Abs(a) % 2 == 0)))
return false;
}
// Case 3
if (a < 0 && b > 0) {
if((Math.Abs(a) + b) % 2 == 0)
return false;
}
return true;
}
Не тестировался, мне нужно ехать домой ...
Ваш метод потерпит неудачу в случае 'а = 1, Ь = 4'. шаги; 'a = 1, b = 4'' a = 2, b = 3', 'a = 3, b = 2',' a = 4, b = 1' .. и так далее. Это, вероятно, лучше подходит для другого сайта, но это не вопрос программирования, это логический вопрос. – Rob
Я в замешательстве. Вы пытаетесь обнаружить бесконечные циклы в общем случае или в особых случаях? (Если это первый, это невозможно). – EJoshuaS
'(b - a)% 2! = 0' на основе того, что показал Роб в качестве примера. –