Dados 3 números enteros positivos A, B y C. Elija un número entero positivo M y multiplique cualquiera de A, B o C por M. La tarea es decidir si A, B y C cumplirían con la media de progresión aritmética (AP) Promedio después de realizar la operación anterior una vez. El orden de A, B, C no se puede cambiar.
Ejemplos:
Entrada: A = 30, B = 5, C = 10
Salida: SI
Explicación: B = 5 se puede multiplicar por M = 4.
Entonces 2 * B = A + C (2 * 20 = 30 + 10).Entrada: A = 2, B = 1, C = 1
Salida: NO
Explicación: A + C = 3 que es impar. B = 1 que es impar.
Ambos valores no se pueden hacer pares (porque 2*B siempre es par, por lo que es necesario hacer que ambos sean pares) e iguales simultáneamente.
Acercarse:
- Se dice que tres enteros están en AP si
2 * B = A + C -(1)
Esta ecuación también se puede escribir como
2 * B – C = A – (2)
y
2 * B – A = C -(3)
A continuación se muestran los pasos que utilizan esta relación para determinar si los tres números dados pueden formar un AP o no:
- Declare una variable new_b e iníciela igual a 2 * B .
- Retorna verdadero si A, B, C ya están en AP . Cualquiera de ellos se puede multiplicar por M=1 y la respuesta siempre será “ SÍ ”.
- Devuelve verdadero si B se puede multiplicar por cualquier número para que sea igual a A+C, es decir (A + C) % new_b = 0 . El resto siempre será 0 independientemente del valor de M .
- Ahora las únicas opciones que quedan son multiplicar A o C para que su suma sea igual a new_b .
- Si (A + C) > new_b, devuelve falso . En este caso, multiplicar A o C por M solo aumentará su valor. La respuesta siempre será “ NO ”.
- De lo contrario, si (new_b – C) % A = 0 , devuelve verdadero . En este caso, A se puede multiplicar por algún número entero M. En este caso, (new_b – C) puede verse como un múltiplo de A. Por lo tanto, al dividir (nuevo_b – C) por A , el resto siempre será 0 independientemente del valor de M. La respuesta será “ SÍ ” (a por ecuación (2)).
- De lo contrario, si (new_b – A) % B = 0 , devuelve verdadero . En este caso, C se puede multiplicar por algún número entero M. En este caso, (new_b – A) puede verse como un múltiplo de C. Por lo tanto, al dividir (new_b – A) por C , el resto siempre será 0 independientemente del valor de M. La respuesta será “ SÍ ” (según la ecuación (3)).
- De lo contrario, devuelve falso .
Ilustración:
Entrada: A = 30, B = 5, C = 10
Salida: SI
Explicación:
new_b = 2 * B
= 2 * 5
= 10
(A + C) % new_b
(30 + 10) % 10
40 % 10 = 0
Esto prueba que los números 30 5 10 están en AP después de multiplicar con algún número M.
A continuación se muestra la implementación del enfoque anterior:
C++
// C++ program to implement // the above approach #include <bits/stdc++.h> using namespace std; // Function to check if A, B, C // can be in A.P. after multiplying // by any integer M bool isAP(int A, int B, int C) { int new_b = B * 2; // Check if A, B, C are already // in A.P. if (new_b == (A + C)) return true; // Check if multiplying B will // give A.P. if ((A + C) % new_b == 0) return true; if ((A + C) > new_b) return false; // Check if multiplying A will // give A.P. if ((new_b - C) % A == 0) return true; // Check if multiplying C will // give A.P. if ((new_b - A) % C == 0) return true; return false; } // Driver code int main() { int A, B, C; A = 30; B = 5; C = 10; // Function call bool ans = isAP(A, B, C); // Displaying the answer if (ans) cout << "YES"; else cout << "NO"; return 0; }
Java
// Java program for the above approach import java.io.*; import java.lang.*; import java.util.*; class GFG { // Function to check if A, B, C // can be in A.P. after multiplying // by any integer M static Boolean isAP(int A, int B, int C) { int new_b = B * 2; // Check if A, B, C are already // in A.P. if (new_b == (A + C)) return true; // Check if multiplying B will // give A.P. if ((A + C) % new_b == 0) return true; if ((A + C) > new_b) return false; // Check if multiplying A will // give A.P. if ((new_b - C) % A == 0) return true; // Check if multiplying C will // give A.P. if ((new_b - A) % C == 0) return true; return false; } // Driver code public static void main (String[] args) { int A, B, C; A = 30; B = 5; C = 10; // Function call Boolean ans = isAP(A, B, C); // Displaying the answer if (ans) System.out.print("YES"); else System.out.print("NO"); } } // This code is contributed by hrithikgarg03188
Python3
# Python code for the above approach # Function to check if A, B, C # can be in A.P. after multiplying # by any integer M def isAP(A, B, C): new_b = B * 2 # Check if A, B, C are already # in A.P. if (new_b == (A + C)): return True # Check if multiplying B will # give A.P. if ((A + C) % new_b == 0): return True if ((A + C) > new_b): return False # Check if multiplying A will # give A.P. if ((new_b - C) % A == 0): return True # Check if multiplying C will # give A.P. if ((new_b - A) % C == 0): return True return False # Driver code A = 30 B = 5 C = 10 # Function call ans = isAP(A, B, C) # Displaying the answer if (ans): print("YES") else: print("NO") # This code is contributed by Saurabh Jaiswal
C#
// C# program to implement // the above approach using System; class GFG { // Function to check if A, B, C // can be in A.P. after multiplying // by any integer M static bool isAP(int A, int B, int C) { int new_b = B * 2; // Check if A, B, C are already // in A.P. if (new_b == (A + C)) return true; // Check if multiplying B will // give A.P. if ((A + C) % new_b == 0) return true; if ((A + C) > new_b) return false; // Check if multiplying A will // give A.P. if ((new_b - C) % A == 0) return true; // Check if multiplying C will // give A.P. if ((new_b - A) % C == 0) return true; return false; } // Driver code public static int Main() { int A, B, C; A = 30; B = 5; C = 10; // Function call bool ans = isAP(A, B, C); // Displaying the answer if (ans) Console.Write("YES"); else Console.Write("NO"); return 0; } } // This code is contributed by Taranpreet
Javascript
<script> // JavaScript code for the above approach // Function to check if A, B, C // can be in A.P. after multiplying // by any integer M function isAP(A, B, C) { let new_b = B * 2; // Check if A, B, C are already // in A.P. if (new_b == (A + C)) return true; // Check if multiplying B will // give A.P. if ((A + C) % new_b == 0) return true; if ((A + C) > new_b) return false; // Check if multiplying A will // give A.P. if ((new_b - C) % A == 0) return true; // Check if multiplying C will // give A.P. if ((new_b - A) % C == 0) return true; return false; } // Driver code let A, B, C; A = 30; B = 5; C = 10; // Function call let ans = isAP(A, B, C); // Displaying the answer if (ans) document.write("YES"); else document.write("NO"); // This code is contributed by Potta Lokesh </script>
YES
Tiempo Complejidad: O(1)
Espacio Auxiliar: O(1)