Dadas tres coordenadas de un triángulo (x1, y1) , (x2, y2) , (x3, y3) . La tarea es averiguar si el triángulo se puede transformar en un triángulo rectángulo moviendo solo un punto exactamente la distancia 1.
Si es posible hacer que el triángulo sea rectángulo , imprima «POSIBLE» , de lo contrario imprima » NO ES POSIBLE” .
Si el triángulo ya es rectángulo , también se debe informar.
Ejemplos:
Entrada:
x1 = -1, y1 = 0
x2 = 2, y2 = 0
x3 = 0, y3 = 1
Salida: POSIBLE La
primera coordenada (-1, 0) puede cambiarse a (0, 0) y corregirse -angulado .
Entrada:
x1 = 36, y1 = 1
x2 = -17, y2 = -54
x3 = -19, y3 = 55
Salida: POSIBLE
Enfoque:
Como se sabe que para un triángulo de lados a , b y c , el triángulo será rectángulo si se cumple la siguiente ecuación: a 2 + b 2 = c 2
Entonces, para todas las coordenadas del triángulo, averigua todos los lados y para las 3 posibles permutaciones de ellos verifica si ya es un triangulo rectangulo y reportalo.
Si la condición anterior no se cumple, entonces se deben realizar las siguientes operaciones
: debemos cambiar todas las coordenadas por 1 una por una y verificar que sea una combinación válida para un triángulo rectángulo.
Mira que puede haber 4 combinaciones posibles para cambiar cada coordenada por 1. Son (-1, 0), (0, 1), (1, 0), (0, -1) . Así que ejecute un ciclo y aplique esos cambios uno por uno para cada coordenada y verifique que la fórmula a 2 + b 2 = c 2 sea verdadera o no.
Si es cierto, entonces es posible transformar el triángulo en un triángulo rectángulo , de lo contrario no.
A continuación se muestra la implementación del código anterior:
C++
// C++ implementation of // the above approach #include <bits/stdc++.h> using namespace std; // Storing all the possible // changes to make the triangle // right-angled int dx[] = { -1, 0, 1, 0 }; int dy[] = { 0, 1, 0, -1 }; // Function to check if the triangle // is right-angled or not int ifRight(int x1, int y1, int x2, int y2, int x3, int y3) { int a = ((x1 - x2) * (x1 - x2)) + ((y1 - y2) * (y1 - y2)); int b = ((x1 - x3) * (x1 - x3)) + ((y1 - y3) * (y1 - y3)); int c = ((x2 - x3) * (x2 - x3)) + ((y2 - y3) * (y2 - y3)); if ((a == (b + c) && a != 0 && b != 0 && c != 0) || (b == (a + c) && a != 0 && b != 0 && c != 0) || (c == (a + b) && a != 0 && b != 0 && c != 0)) { return 1; } return 0; } // Function to check if the triangle // can be transformed to right-angled void isValidCombination(int x1, int y1, int x2, int y2, int x3, int y3) { int x, y; // Boolean variable to // return true or false bool possible = 0; // If it is already right-angled if (ifRight(x1, y1, x2, y2, x3, y3)) { cout << "ALREADY RIGHT ANGLED"; return; } else { // Applying the changes on the // co-ordinates for (int i = 0; i < 4; i++) { // Applying on the first // co-ordinate x = dx[i] + x1; y = dy[i] + y1; if (ifRight(x, y, x2, y2, x3, y3)) { cout << "POSSIBLE"; return; } // Applying on the second // co-ordinate x = dx[i] + x2; y = dy[i] + y2; if (ifRight(x1, y1, x, y, x3, y3)) { cout << "POSSIBLE"; return; } // Applying on the third // co-ordinate x = dx[i] + x3; y = dy[i] + y3; if (ifRight(x1, y1, x2, y2, x, y)) { cout << "POSSIBLE"; return; } } } // If can't be transformed if (!possible) cout << "NOT POSSIBLE" << endl; } // Driver Code int main() { int x1 = -49, y1 = 0; int x2 = 0, y2 = 50; int x3 = 0, y3 = -50; isValidCombination(x1, y1, x2, y2, x3, y3); return 0; }
Java
// Java implementation of the approach import java.util.*; class GFG { // Storing all the possible // changes to make the triangle // right-angled static int dx[] = { -1, 0, 1, 0 }; static int dy[] = { 0, 1, 0, -1 }; // Function to check if the triangle // is right-angled or not static boolean ifRight(int x1, int y1, int x2, int y2, int x3, int y3) { int a = ((x1 - x2) * (x1 - x2)) + ((y1 - y2) * (y1 - y2)); int b = ((x1 - x3) * (x1 - x3)) + ((y1 - y3) * (y1 - y3)); int c = ((x2 - x3) * (x2 - x3)) + ((y2 - y3) * (y2 - y3)); if ((a == (b + c) && a != 0 && b != 0 && c != 0) || (b == (a + c) && a != 0 && b != 0 && c != 0) || (c == (a + b) && a != 0 && b != 0 && c != 0)) { return true; } return false; } // Function to check if the triangle // can be transformed to right-angled static void isValidCombination(int x1, int y1, int x2, int y2, int x3, int y3) { int x, y; // Boolean variable to // return true or false boolean possible = false; // If it is already right-angled if (ifRight(x1, y1, x2, y2, x3, y3)) { System.out.print("ALREADY RIGHT ANGLED"); return; } else { // Applying the changes on the // co-ordinates for (int i = 0; i < 4; i++) { // Applying on the first // co-ordinate x = dx[i] + x1; y = dy[i] + y1; if (ifRight(x, y, x2, y2, x3, y3)) { System.out.print("POSSIBLE"); return; } // Applying on the second // co-ordinate x = dx[i] + x2; y = dy[i] + y2; if (ifRight(x1, y1, x, y, x3, y3)) { System.out.print("POSSIBLE"); return; } // Applying on the third // co-ordinate x = dx[i] + x3; y = dy[i] + y3; if (ifRight(x1, y1, x2, y2, x, y)) { System.out.print("POSSIBLE"); return; } } } // If can't be transformed if (!possible) System.out.println("NOT POSSIBLE"); } // Driver Code public static void main(String[] args) { int x1 = -49, y1 = 0; int x2 = 0, y2 = 50; int x3 = 0, y3 = -50; isValidCombination(x1, y1, x2, y2, x3, y3); } } // This code is contributed by Rajput-Ji
Python3
# Python3 implementation of the above approach # Storing all the possible # changes to make the triangle # right-angled dx = [-1, 0, 1, 0] dy = [0, 1, 0, -1] # Function to check if the triangle # is right-angled or not def ifRight(x1, y1, x2, y2, x3, y3): a = ((x1 - x2) * (x1 - x2)) + \ ((y1 - y2) * (y1 - y2)) b = ((x1 - x3) * (x1 - x3)) + \ ((y1 - y3) * (y1 - y3)) c = ((x2 - x3) * (x2 - x3)) + \ ((y2 - y3) * (y2 - y3)) if ((a == (b + c) and a != 0 and b != 0 and c != 0) or (b == (a + c) and a != 0 and b != 0 and c != 0) or (c == (a + b) and a != 0 and b != 0 and c != 0)): return 1 # Function to check if the triangle # can be transformed to right-angled def isValidCombination(x1, y1, x2, y2, x3, y3): x, y = 0, 0 # Boolean variable to # return true or false possible = 0 # If it is already right-angled if (ifRight(x1, y1, x2, y2, x3, y3)): print("ALREADY RIGHT ANGLED") return else: # Applying the changes on the # co-ordinates for i in range(4): # Applying on the first # co-ordinate x = dx[i] + x1 y = dy[i] + y1 if (ifRight(x, y, x2, y2, x3, y3)): print("POSSIBLE") return # Applying on the second # co-ordinate x = dx[i] + x2 y = dy[i] + y2 if (ifRight(x1, y1, x, y, x3, y3)): print("POSSIBLE") return # Applying on the third # co-ordinate x = dx[i] + x3 y = dy[i] + y3 if (ifRight(x1, y1, x2, y2, x, y)): print("POSSIBLE") return # If can't be transformed if (possible == 0): print("NOT POSSIBLE") # Driver Code x1 = -49 y1 = 0 x2 = 0 y2 = 50 x3 = 0 y3 = -50 isValidCombination(x1, y1, x2, y2, x3, y3) # This code is contributed by Mohit Kumar
C#
// C# implementation of the approach using System; class GFG { // Storing all the possible // changes to make the triangle // right-angled static int []dx = { -1, 0, 1, 0 }; static int []dy = { 0, 1, 0, -1 }; // Function to check if the triangle // is right-angled or not static bool ifRight(int x1, int y1, int x2, int y2, int x3, int y3) { int a = ((x1 - x2) * (x1 - x2)) + ((y1 - y2) * (y1 - y2)); int b = ((x1 - x3) * (x1 - x3)) + ((y1 - y3) * (y1 - y3)); int c = ((x2 - x3) * (x2 - x3)) + ((y2 - y3) * (y2 - y3)); if ((a == (b + c) && a != 0 && b != 0 && c != 0) || (b == (a + c) && a != 0 && b != 0 && c != 0) || (c == (a + b) && a != 0 && b != 0 && c != 0)) { return true; } return false; } // Function to check if the triangle // can be transformed to right-angled static void isValidCombination(int x1, int y1, int x2, int y2, int x3, int y3) { int x, y; // Boolean variable to // return true or false bool possible = false; // If it is already right-angled if (ifRight(x1, y1, x2, y2, x3, y3)) { Console.WriteLine("ALREADY RIGHT ANGLED"); return; } else { // Applying the changes on the // co-ordinates for (int i = 0; i < 4; i++) { // Applying on the first // co-ordinate x = dx[i] + x1; y = dy[i] + y1; if (ifRight(x, y, x2, y2, x3, y3)) { Console.WriteLine("POSSIBLE"); return; } // Applying on the second // co-ordinate x = dx[i] + x2; y = dy[i] + y2; if (ifRight(x1, y1, x, y, x3, y3)) { Console.WriteLine("POSSIBLE"); return; } // Applying on the third // co-ordinate x = dx[i] + x3; y = dy[i] + y3; if (ifRight(x1, y1, x2, y2, x, y)) { Console.Write("POSSIBLE"); return; } } } // If can't be transformed if (!possible) Console.WriteLine("NOT POSSIBLE"); } // Driver Code static public void Main () { int x1 = -49, y1 = 0; int x2 = 0, y2 = 50; int x3 = 0, y3 = -50; isValidCombination(x1, y1, x2, y2, x3, y3); } } // This code is contributed by AnkitRai01
Javascript
<script> // Javascript implementation of // the above approach // Storing all the possible // changes to make the triangle // right-angled let dx = [ -1, 0, 1, 0 ]; let dy = [ 0, 1, 0, -1 ]; // Function to check if the triangle // is right-angled or not function ifRight(x1, y1, x2, y2, x3, y3) { let a = ((x1 - x2) * (x1 - x2)) + ((y1 - y2) * (y1 - y2)); let b = ((x1 - x3) * (x1 - x3)) + ((y1 - y3) * (y1 - y3)); let c = ((x2 - x3) * (x2 - x3)) + ((y2 - y3) * (y2 - y3)); if ((a == (b + c) && a != 0 && b != 0 && c != 0) || (b == (a + c) && a != 0 && b != 0 && c != 0) || (c == (a + b) && a != 0 && b != 0 && c != 0)) { return 1; } return 0; } // Function to check if the triangle // can be transformed to right-angled function isValidCombination(x1, y1, x2, y2, x3, y3) { let x, y; // Boolean variable to // return true or false let possible = 0; // If it is already right-angled if (ifRight(x1, y1, x2, y2, x3, y3)) { document.write("ALREADY RIGHT ANGLED"); return; } else { // Applying the changes on the // co-ordinates for (let i = 0; i < 4; i++) { // Applying on the first // co-ordinate x = dx[i] + x1; y = dy[i] + y1; if (ifRight(x, y, x2, y2, x3, y3)) { document.write("POSSIBLE"); return; } // Applying on the second // co-ordinate x = dx[i] + x2; y = dy[i] + y2; if (ifRight(x1, y1, x, y, x3, y3)) { document.write("POSSIBLE"); return; } // Applying on the third // co-ordinate x = dx[i] + x3; y = dy[i] + y3; if (ifRight(x1, y1, x2, y2, x, y)) { document.write("POSSIBLE"); return; } } } // If can't be transformed if (!possible) document.write("NOT POSSIBLE<br>"); } // Driver Code let x1 = -49, y1 = 0; let x2 = 0, y2 = 50; let x3 = 0, y3 = -50; isValidCombination(x1, y1, x2, y2, x3, y3); </script>
POSSIBLE
Complejidad de tiempo: O(1)
Espacio Auxiliar: O(1)
Publicación traducida automáticamente
Artículo escrito por dangenmaster2 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA