Solução por Anita Almeida
Este problema trata-se de um problema básico de geometria. O seu programa deve apenas analisar se o círculo de raio 2 (o círculo que representa a área da flor) está dentro, ou seja, inscrito ao círculo de raio 1 (o círculo desenhado pelo caçador). Para isso, utilizaremos três conceitos da matemática. O primeiro, chamado de Circunferências Internas, determina que para uma circunferência estar totalmente inscrita à outra é necessário que a distância entre seus centros seja menor que a diferença entre seus raios. O segundo, chamado de Tangente Interna, determina que para uma circunferência tangenciar internamente outra circunferência, a distância entre seus centros deve ser igual a diferença entre seus raios.
Como no problema é permitido que uma circunferência tangencie a outra, ou até tenha o mesmo centro e o mesmo raio, os dois conceitos devem ser utilizados, seguindo a seguinte fórmula: distância do centro 1 () ao centro 2 () é menor ou igual a raio 1 () - raio 2 (), ou seja, . Utilizando agora o terceiro e último conceito, para determinar a distância entre os centros de duas circunferências seguimos a seguinte fórmula: , sendo e as coordenadas do e e as coordenadas do . Assim, a equação citada anteriormente, que relaciona os raios com a distâncias dos centros das circunferências pode ser desenvolvida como: . Para simplificar, chamaremos o lado esquerdo da equação de , sendo assim: (Equação 1).
Iniciando a programação então, após adicionar as bibliotecas e declarar as variáveis (lembrando que todas devem ser declaradas como "int" com exceção do que pode não ser inteiro por conta da raiz quadrada, por isso utilizamos o tipo "float"), é necessário receber/ler as variáveis de entrada até o EOF - End of File. Para isso utilizamos um loop que leia as variáveis (cin>>) até ser determinado EOF. Em seguida, iniciamos a parte de cálculos.
O cálculo 1 (como comentado na programação abaixo), apenas atribui o valor da distância dos centros e a , ou seja, . Apenas como observação, a função de raiz é a sqrt(). O cálculo 2 (como comentado na programação abaixo), entra como a condição de todo o problema, sendo equivalente a Equação 1, ou seja, a condição para determinar o "RICO" ou o "MORTO" é satisfazer ou não a equação . Se essa condição for satisfeita, significa que a flor está dentro do círculo feito pelo caçador e, assim, a saída deve ser "RICO". Se essa condição não for satisfeita, significa que a flor não está totalmente dentro do círculo feito pelo caçador e, assim, a saída deve ser "MORTO". Por fim, o programa retorna a 0 após todos os testes.
Segue o código comentado para melhor compreensão da solução:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include<bits/stdc++.h> //biblioteca utilizada | |
#include <cmath> //biblioteca utilizada | |
using namespace std; | |
int main() | |
{ | |
int R1, X1, Y1, R2, X2, Y2; //declaração das variáveis que compõem | |
float XY; //declaração da variável utilizada na lógica | |
while(cin >> R1 >> X1 >> Y1 >> R2 >> X2 >> Y2) //loop para ler todas as variáveis de entrada | |
{ | |
XY = sqrt(((X2 - X1) * (X2 - X1)) + ((Y2 - Y1) * (Y2 - Y1))); //cálculo 1 | |
if(XY<=(R1-R2)) //condição cálculo 2 | |
{ | |
cout << "RICO" << endl; //consequência | |
} | |
else //condição do cáculo 2 negada | |
{ | |
cout << "MORTO" << endl; //consequência | |
} | |
} | |
return 0; //zera a programação | |
} |