Как в прямоугольнике найти координаты четвертой вершины

Improve Article

Save Article

Like Article

  • Read
  • Discuss
  • Improve Article

    Save Article

    Like Article

    Given an N * M grid. It contains exactly three ‘*’ and every other cell is a ‘.’ where ‘*’ denotes a vertex of a rectangle. The task is to find the coordinates of the fourth (missing) vertex (1-based indexing).
    Examples: 
     

    Input: grid[][] = {“*.*”, “*..”, “…”} 
    Output: 2 3 
    (1, 1), (1, 3) and (2, 1) are the given coordinates of the rectangle where (2, 3) is the missing coordinate.
    Input: grid[][] = {“*.*”, “..*”} 
    Output: 2 1 
     

    Approach: Find the coordinates of the 3 vertices by iterating through the given grid. Since a rectangle consists of 2 X-coordinates and 2 Y-coordinates and 4 vertices, every X-coordinate and Y-coordinate should occur exactly twice. We can count how many times each X and Y coordinate occurs in the 3 given vertices and the 4th one will have coordinates that occur only once.
    Below is the implementation of the above approach: 
     

    C++

    #include <bits/stdc++.h>

    using namespace std;

    pair<int, int> findFourthVertex(int n, int m, string s[])

    {

        unordered_map<int, int> row, col;

        for (int i = 0; i < n; i++)

            for (int j = 0; j < m; j++)

                if (s[i][j] == '*') {

                    row[i]++;

                    col[j]++;

                }

        int x, y;

        for (auto tm : row)

            if (tm.second == 1)

                x = tm.first;

        for (auto tm : col)

            if (tm.second == 1)

                y = tm.first;

        return make_pair(x + 1, y + 1);

    }

    int main()

    {

        string s[] = { "*.*", "*..", "..." };

        int n = sizeof(s) / sizeof(s[0]);

        int m = s[0].length();

        auto rs = findFourthVertex(n, m, s);

        cout << rs.first << " " << rs.second;

    }

    Java

    import java.util.HashMap;

    import java.util.Map;

    class GfG

    {

        static Pair<Integer, Integer> findFourthVertex(int n,

                                            int m, String s[])

        {

            HashMap<Integer, Integer> row = new HashMap<>();

            HashMap<Integer, Integer> col = new HashMap<>();

            for (int i = 0; i < n; i++)

            {

                for (int j = 0; j < m; j++)

                {

                    if (s[i].charAt(j) == '*')

                    {

                        if (row.containsKey(i))

                        {

                            row.put(i, row.get(i) + 1);

                        }

                        else

                        {

                            row.put(i, 1);

                        }

                        if (col.containsKey(j))

                        {

                            col.put(j, col.get(j) + 1);

                        }

                        else

                        {

                            col.put(j, 1);

                        }

                    }

                }

            }

            int x = 0, y = 0;

            for (Map.Entry<Integer, Integer> entry : row.entrySet())

            {

                if (entry.getValue() == 1)

                    x = entry.getKey();

            }

            for (Map.Entry<Integer, Integer> entry : col.entrySet())

            {

                if (entry.getValue() == 1)

                    y = entry.getKey();

            }

            Pair<Integer, Integer> ans = new Pair<>(x + 1, y + 1);

            return ans;

        }

        public static void main(String []args)

        {

            String s[] = { "*.*", "*..", "..." };

            int n = s.length;

            int m = s[0].length();

            Pair<Integer, Integer> rs = findFourthVertex(n, m, s);

            System.out.println(rs.first + " " + rs.second);

        }

    }

    class Pair<A, B>

    {

        A first;

        B second;

        public Pair(A first, B second)

        {

            this.first = first;

            this.second = second;

        }

    }

    Python3

    def findFourthVertex(n, m, s) :

        row = dict.fromkeys(range(n), 0)

        col = dict.fromkeys(range(m), 0)

        for i in range(n) :

            for j in range(m) :

                if (s[i][j] == '*') :

                    row[i] += 1;

                    col[j] += 1;

        for keys,values in row.items() :

            if (values == 1) :

                x = keys;

        for keys,values in col.items() :

            if (values == 1) :

                y = keys;

        return (x + 1, y + 1) ;

    if __name__ == "__main__" :

        s = [ "*.*", "*..", "..." ]

        n = len(s);

        m = len(s[0]);

        rs = findFourthVertex(n, m, s);

        print(rs[0], rs[1])

    C#

    using System;

    using System.Collections.Generic;

    class GfG

    {

        static Pair<int, int> findFourthVertex(int n,

                                            int m, String []s)

        {

            Dictionary<int, int> row = new Dictionary<int, int>();

            Dictionary<int, int> col = new Dictionary<int, int>();

            for (int i = 0; i < n; i++)

            {

                for (int j = 0; j < m; j++)

                {

                    if (s[i][j] == '*')

                    {

                        if (row.ContainsKey(i))

                        {

                            row[i] = row[i] + 1;

                        }

                        else

                        {

                            row.Add(i, 1);

                        }

                        if (col.ContainsKey(j))

                        {

                            col[j] = col[j] + 1;

                        }

                        else

                        {

                            col.Add(j, 1);

                        }

                    }

                }

            }

            int x = 0, y = 0;

            foreach(KeyValuePair<int, int> entry in row)

            {

                if (entry.Value == 1)

                    x = entry.Key;

            }

            foreach(KeyValuePair<int, int> entry in col)

            {

                if (entry.Value == 1)

                    y = entry.Key;

            }

            Pair<int, int> ans = new Pair<int, int>(x + 1, y + 1);

            return ans;

        }

        public static void Main(String []args)

        {

            String []s = { "*.*", "*..", "..." };

            int n = s.Length;

            int m = s[0].Length;

            Pair<int, int> rs = findFourthVertex(n, m, s);

            Console.WriteLine(rs.first + " " + rs.second);

        }

    }

    class Pair<A, B>

    {

        public A first;

        public B second;

        public Pair(A first, B second)

        {

            this.first = first;

            this.second = second;

        }

    }

    Javascript

    <script>

    function findFourthVertex(n, m, s)

    {

        var row = new Map(), col = new Map();

        for (var i = 0; i < n; i++)

            for (var j = 0; j < m; j++)

                if (s[i][j] == '*') {

                    if(row.has(i))

                        row.set(i, row.get(i)+1)

                    else

                        row.set(i, 1)

                    if(col.has(j))

                        col.set(j, col.get(j)+1)

                    else

                        col.set(j, 1)

                }

        var x, y;

        row.forEach((value, key) => {

            if (value == 1)

                x = key;

        });

        col.forEach((value, key) => {

            if (value == 1)

                y = key;

        });

        return [x + 1, y + 1];

    }

    var s = ["*.*", "*..", "..." ];

    var n = s.length;

    var m = s[0].length;

    var rs = findFourthVertex(n, m, s);

    document.write( rs[0] + " " + rs[1]);

    </script>

    Time Complexity: O(N*M), as we are using a loop to traverse N*M times.
     Auxiliary Space: O(N + M), as we are using extra space for map.

    Last Updated :
    31 May, 2022

    Like Article

    Save Article

    Vote for difficulty

    Current difficulty :
    Basic

    Вопрос от пользователя:

    C# Даны целочисленные координаты трех вершин прямоугольника, стороны
    которого параллельны координатным осям. Найти координаты его четвертой вершины.

    Подождите!

    Не закрывайте страницу. Нейросеть пишет ответ. Он появится тут.

    Этот ответ написан нейросетью.

    Искуственный интеллект во многом преуспевает, но в некоторых областях может давать неточные ответы.
    Если вам не понравился ответ, попробуйте задать его более развёрнуто и конкретно, используя точные параметры.

    Ответ нейросети:

    Для нахождения координаты четвертой вершины прямоугольника необходимо знать координаты оставшихся трех вершин. Предположим, что первая вершина имеет координаты x1 и y1, вторая вершина имеет координаты x2 и y2, а третья вершина имеет координаты x3 и y3.

    Сначала найдем длины всех сторон прямоугольника. Для этого используем формулу:

    a = sqrt((x2 — x1)^2 + (y2 — y1)^2)
    b = sqrt((x3 — x2)^2 + (y3 — y2)^2)

    Здесь «a» — длина одной стороны прямоугольника, а «b» — длина другой стороны.

    Далее необходимо найти два возможных вектора, которые можно построить, соединив вершины прямоугольника. Эти векторы будут перпендикулярны друг другу и будут находиться в направлении сторон прямоугольника.

    Для нахождения первого вектора вычитаем из координат второй вершины координаты первой вершины:

    v1 = (x2 — x1, y2 — y1)

    Для нахождения второго вектора вычитаем из координат третьей вершины координаты второй вершины:

    v2 = (x3 — x2, y3 — y2)

    Затем найдем векторное произведение этих двух векторов, чтобы найти вектор, перпендикулярный обоим:

    v = v1 x v2

    В результате мы получим третий вектор, который будет перпендикулярен первым двум.

    Теперь можем найти координаты четвертой вершины, если наши первые три вершины пронумеруются так, чтобы первая вершина была в левом верхнем углу прямоугольника, а вторая вершина была верхней правой вершиной, а третья — правой нижней вершиной. В этом случае координаты четвертой вершины будут следующими:

    x4 = x3 + v.x
    y4 = y3 + v.y

    Если же первая вершина — левая нижняя, вторая вершина — левая верхняя, а третья вершина — правая верхняя, то координаты четвертой вершины будут следующими:

    x4 = x2 + v.x
    y4 = y2 + v.y

    Таким образом, мы можем найти координаты четвертой вершины прямоугольника, зная координаты любых трех его вершин, длину стороны и вектор, перпендикулярный сторонам прямоугольника.

    ⚠️Зарепортить пост!

    Чтобы оставить комментарий, необходимо авторизоваться.

    Задай любой вопрос нейросети!

    она справится с любой поставленной задачей быстрее чем поиск в Яндекс.

    Для того, чтобы задать вопрос нейросети, необходимо войти на сайт.

    Последние вопросы

    (c) ChatGPT по русски 2023. Все права защищены. При обнаружении неправомерного контента пишите на [email protected]

    Студворк — интернет-сервис помощи студентам

    У меня задание такое: Даны целочисленные координаты трех вершин прямоугольника, стороны которого параллельны координатным осям. Найти координаты его четвертой вершины.

    Я сделала задачу. Пишет что 3.exe — 0 error(s), 0 warning(s)
    И всё вроде бы нормально, когда запускаю вставляю координаты, а вывод не выводит. Может я немного в if запуталась? Помогите пожалуйста,может где я что-то не правильно записала.

    C++
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    
    #include <iostream.h>
    #include <windows.h>
    int main ()
    {
        char  x1,x2,x3,x4,y1,y2,y3,y4;
        cout<<"Vvedite x1,y1";
        cin>>x1>>y1;
        cout<<"Vvedite x2,y2";
        cin>>x2>>y2;
        cout<<"Vvedite x3,y3";
        cin>>x3>>y3;
        if (x1 = x2) {
            x4 = x3;
        } else {
            if (x1 = x3) {
                x4= x2;
            } else {
                x4 = x1;
                }
            } 
            if (y1 = y2) {
                y4 = y3;
            } else {
                if (y1 = y3) {
                    y4 = y2;
                }
                else {
                    y4 = y1;
                }
                }
    cout<<x4;
    cout<<y4;
    system ("pause"); 
    return 0;

    Вот как получается у меня. Помогите пожалуйста, очень нужно

    Так как координаты трёх вершин имеют специальный, а не общий вид, можно, не мудрствуя лукаво, СРАЗУ написать ответ D(4,-3).

    Немного поясню свой ответ. Сразу видно, что прямоугольник расположен так, что его стороны параллельны осям координат. Это потому, что А и В имеют одинаковые абсциссы, а В и С одинаковые ординаты, поэтому по соображениям симметрии А и D должны иметь одинаковые ординаты, а C и D одинаковые абсциссы, откуда следуют координаты D.
    Если бы прямоугольник был как-то повёрнут и сдвинут относительно осей координат, то координаты четвёртой точки тоже можно было найти, но не так просто, а путём определённых вычислений и знания свойств прямоугольника.

    Да, там ещё площадь. Понятно, что стороны равны 5 и 9,  значит площадь равна 45.

    bsitenldefom104

    bsitenldefom104

    Вопрос по математике:

    Точки А(-3,1)В(1,1)С(1,-1) Вершины прямоугольника АВСД Найдите координаты четвертой вершины прямоугольника и вычислите его периметр и площадь,если единичный отрезок 0,5 см ПОМОГИТЕ ПОЖАЛУЙСТА!!!❤️

    Трудности с пониманием предмета? Готовишься к экзаменам, ОГЭ или ЕГЭ?

    Воспользуйся формой подбора репетитора и занимайся онлайн. Пробный урок — бесплатно!

    Ответы и объяснения 1

    averampey

    averampey

    Д(-3,-1)
    (2+1)•2=6см периметр
    2•1=2см/кв площадь

    Знаете ответ? Поделитесь им!

    Гость

    Гость ?

    Как написать хороший ответ?

    Как написать хороший ответ?

    Чтобы добавить хороший ответ необходимо:

    • Отвечать достоверно на те вопросы, на которые знаете
      правильный ответ;
    • Писать подробно, чтобы ответ был исчерпывающий и не
      побуждал на дополнительные вопросы к нему;
    • Писать без грамматических, орфографических и
      пунктуационных ошибок.

    Этого делать не стоит:

    • Копировать ответы со сторонних ресурсов. Хорошо ценятся
      уникальные и личные объяснения;
    • Отвечать не по сути: «Подумай сам(а)», «Легкотня», «Не
      знаю» и так далее;
    • Использовать мат — это неуважительно по отношению к
      пользователям;
    • Писать в ВЕРХНЕМ РЕГИСТРЕ.

    Есть сомнения?

    Не нашли подходящего ответа на вопрос или ответ отсутствует?
    Воспользуйтесь поиском по сайту, чтобы найти все ответы на похожие
    вопросы в разделе Математика.

    Трудности с домашними заданиями? Не стесняйтесь попросить о помощи —
    смело задавайте вопросы!

    Математика — наука о структурах, порядке и отношениях, исторически сложившаяся на основе операций подсчёта, измерения и описания формы объектов.

    Понравилась статья? Поделить с друзьями:
  • Как найти градусы в подобных треугольниках
  • Как составить молекулярное ионное уравнение hcl
  • You need to enable deep to launch faceit ac как исправить
  • Незащищенное соединение firefox как исправить
  • Как найти консоль ошибок