elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Tutorial básico de Quickjs


  Mostrar Mensajes
Páginas: [1]
1  Programación / Programación C/C++ / Re: Ayuda. en: 27 Febrero 2019, 11:04 am
Para los números impares cuya raíz cuadrada es entera, como puede ser 9, 25, 49, ... da un resultado inesperado.

La solución a la que yo he llegado:


Código:

#include <iostream>
#include <cmath>

using namespace std;

int main(){
    int n;
    cout << "Numero: ";
    cin >> n;

    int indice = 0;     // indice mínimo necesario de la matriz
    for( int i = 1; i * i <= n; i += 2 ) {
        indice++;
    }

     // almacena los 4 puntos cardinales de 1 respecto a n
    int cardinales[4];

    // primer punto cardinal
    cardinales[0] = indice + (2 * indice - 1) * (2 * indice - 1);

    // resto de puntos cardinales
    for( int i = 1; i < 4; i++ ){
        cardinales[i] = cardinales[i - 1] + indice * 2;
    }

    // distancia al mayor cardinal menor que n
    int distancia = abs(cardinales[0] - n);
    for( int i = 1; i < 4; i++ ) {
        if(  abs(cardinales[i] - n) < distancia )
            distancia = abs(cardinales[i] - n);
    }

    int manhatan = distancia + indice;

    float raiz = sqrt(n);
    int raiz_entera = (int)raiz;

    // Si n es impar y su raiz cuadrada es entera
    if( (n % 2 != 0) && (raiz == raiz_entera) )
        manhatan = manhatan - 2;

    cout << "\nDistancia Manhatan al #1: " << manhatan << endl;

    return 0;
}


Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines