Професионална програма
Loading...
+ Нов въпрос
cecosvidovski avatar cecosvidovski 58 Точки

Methods and Debugging - Exercices > 08. Center Point

 С това решение на Methods and Debugging - Exercices > 08. Center Point ми дава 1-ви, 2-ри и 3-ти тест грешни...
Някой може ли да ми каже къде греша и как мога да си поправя грешката? Благодаря предварително :)

using System;
using System.Collections.Generic;

namespace CenterPoint
{
    class Program
    {
        static void Main()
        {
            int x1 = int.Parse(Console.ReadLine());
            int y1 = int.Parse(Console.ReadLine());
            int x2 = int.Parse(Console.ReadLine());
            int y2 = int.Parse(Console.ReadLine());
            string centerPoint = "(" + string.Join(", ", FindClosest(x1, x2, y1, y2).ToArray()) + ")";
            Console.WriteLine(centerPoint);
        }

        static List<int> FindClosest(int x1, int x2, int y1, int y2)
        {
            List<int> numbers = new List<int>();
            if (Math.Abs(x1) >= Math.Abs(x2))
            {
                numbers.Add(x2);
            }
            else if (Math.Abs(x1) < Math.Abs(x2))
            {
                numbers.Add(x1);
            }
            if (Math.Abs(y1) >= Math.Abs(y2))
            {
                numbers.Add(y2);
            }
            else if (Math.Abs(y1) < Math.Abs(y2))
            {
                numbers.Add(y1);
            }
            return numbers;
        }
    }    
}

 

0
Programming Fundamentals 03/10/2016 19:38:48
DStefanow avatar DStefanow 112 Точки
Best Answer

Никъде в условието, не е казано, че входа може да е само int. Смени го на double и ще ти даде 80/100 и грешката ще ти е някъде в логиката, а няма да гърми за Runtime error.

0
DStefanow avatar DStefanow 112 Точки

И като цяло е най- лесно да се направи по Питагорова теорема. Като приемеш че двойките числа ти дават една точка в равнината, при която пускане на пряка отсечка към центъра е логично най- късата дистанция. И можеш да направиш проверка от рода на: 

if(Math.Sqrt(x1 * x1 + y1 * y1) > Math.Sqrt(x2 * x2 + y2 * y2))
 return (x1, y1)- може в лист, да ги печаташ, матрица и каквото друго ти дойде;

else 
 return x2, y2- логиката е същата;

 

1
cecosvidovski avatar cecosvidovski 58 Точки

Мерси за помоща :) Принципно не съм много добър по математика и май там е проблема :)

1
davichonov365 avatar davichonov365 127 Точки

а ако точката лежи на координатната система? 

0
Stanislav.Petrov avatar Stanislav.Petrov 12 Точки

Давам възможно решение, което дава 100/100:

https://pastebin.com/q7pJDV05

0
hristo_skr avatar hristo_skr 2 Точки

Това ми дава,че е ОК :) и простико седи :) https://pastebin.com/tGf5QtMs

0
Julianh12 avatar Julianh12 2 Точки

Значи на Python тая задача дава абсолютно на всичките решения 80/100.Пренаписах всички решения от C# на Python и дава

80/100



x1 = float(input())
y1 = float(input())
x2 = float(input())
y2 = float(input())

def nearest_to_zero(x1, y1, x2, y2):

            x1Abs = abs(x1)
            y1Abs = abs(y1)
            x2Abs = abs(x2)
            y2Abs = abs(y2)
            if(x1Abs + y1Abs <= x2Abs + y2Abs ):
                print(f"({x1:.0f}, {y1:.0f})")
            else:
                print(f"({x2:.0f}, {y2:.0f})")
nearest_to_zero(x1,y1,x2,y2)
0