Programação Imperativa

100 Questões Fichas Testes/Exames

Questão 49: maisCentral

Voltar

Considere o seguinte tipo para representar a posição de um robot numa grelha.

typedef struct posicao {
    int x, y;
} Posicao; 

Defina a função int maisCentral (Posicao pos[], int N) que, dado um array com N posições, determina o índice da posição que está mais perto da origem (note que as coordenadas de cada ponto são números inteiros).

Exemplo

> Posicao pos[4] = { {2,3}, {0,4}, {-2,1}, {3,-1} };
> maisCentral(pos, 4)
(int) 2 // correspondente a {-2,1}

Resolução

#include <stdlib.h>
#define manDist(x1,y1,x2,y2) abs(x1 - x2) + abs(y1 - y2)

int maisCentral (Posicao pos[], int N) {
    int minDist = manDist(pos[0].x, pos[0].y, 0, 0);
    int ans = 0, i, dist;
    for(i = 1; i < N; i++) {
        if((dist = manDist(pos[i].x, pos[i].y, 0, 0)) < minDist) {
            ans = i;
            minDist = dist;
        }
    }
    return ans;
}