Loading...
VladimirMikov avatar VladimirMikov 28 Точки

Проблем със задача C#

Здравейте, имам проблем с решението на въпросната задача 1.Най-голям общ делител. В judge ми дава 90/100 и не мога да разбера защо. Логиката си намирам за правилна , въпреки, че не използвам алгоритъма на Евклид. Благодаря!

Прилагам .линк към задачата 

https://softuni.bg/trainings/resources/officedocument/36151/exercise-problem-descriptions-programming-basics-with-csharp-november-2018/2179

Линк към judge:

https://judge.softuni.bg/Contests/Compete/Index/1163#0

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _01.Greatest_Common_Divisor__CGD_
{
    class Program
    {
        static void Main(string[] args)
        {
            int a = int.Parse(Console.ReadLine());
            int b = int.Parse(Console.ReadLine());
            int obshtDel = 0;
            int delitel = 1;

            if (a==0)
            {
                Console.WriteLine(b);
            }
            if (b==0)
            {
                Console.WriteLine(a);
            }
            if (a!=0 && b!=0)
            {
                while (delitel <= a)
                {
                    if (a % delitel == 0 && b % delitel == 0)
                    {
                        obshtDel = delitel;
                    }
                    delitel++;
                }
                Console.WriteLine(obshtDel);
            }     

        }
    }
}


 

Тагове:
0
Programming Basics
The_assassin avatar The_assassin 158 Точки

Ето едно решение:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _01.Greatest_Common_Divisor__CGD_
{
    class Program
    {
        static void Main(string[] args)
        {
            int a = int.Parse(Console.ReadLine());
            int b = int.Parse(Console.ReadLine());
            int n;

            while (b != 0)
            {
                n = b;
                b = a % b;
                a = n;
            }
        Console.WriteLine(a);
        }

    }
}

 

0
kolioi avatar kolioi 641 Точки

Логиката ти е правилна, само че решението е много бавно и дава грешка за време на последния тест. Твоето решение минава за 0.327 секунди при ограничение от 0.200 с. Само за сравнение, решението, което е дал колегата минава за 0.031 с. Така че решението ти е много бавно за големи числа, това е проблема.

1
krum_43 avatar krum_43 759 Точки

А какво се случва ако а=0 и b=0?

0
The_assassin avatar The_assassin 158 Точки

Според Вас, какво се случва?

0
krum_43 avatar krum_43 759 Точки

Ами честно казано и аз не знам.Кой е най-големият общ делител на 0 и 0?!?

Може би maxValue aко има задени някакви ограничения,но в случая такива няма.

0
The_assassin avatar The_assassin 158 Точки

Според мене, след като „на нула не се дели“, „0“, каквото ще изпише в такъв случай е коректен отговор. Но дори и това да звучи малко спорно, в условието няма специално изискване за това, така че системата го приема за вярно.

0
yvette avatar yvette 4 Точки

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace GreatestCommonDivisor
{
    class Program
    {
        static void Main(string[] args)
        {
            int a = int.Parse(Console.ReadLine());
            int b = int.Parse(Console.ReadLine());
            int result = 0;
            if (b==0)
            {
                result = a;
            }
            else
            {
                while (b!=0)
                {
                    result = b;
                    b = a % b;
                    a = result;
                }
            }
            Console.WriteLine(result);
        }
    }
}
 

0
The_assassin avatar The_assassin 158 Точки

Според тебе, тази излишна проверка с какво би била полезна?

0
krum_43 avatar krum_43 759 Точки

Проверката за if(b==0) e необходима,понеже иначе при вход н.р. 100 и 0 ще ни изведе 0,защото няма да влезнем в цикъла,а resulta e сетнат=0.

0
The_assassin avatar The_assassin 158 Точки

...а resulta e сетнат=0

Аз имах предвид спрямо моя код, където това е избегнато. Защото това е същото като в моя код, плюс една допълнителна проверка, която така или иначе си я има. Не, че няма да даде верен резултат, но мислите ли, че с оглед оптимизиране на изпълнението, повторението на една и съща проверка е удачно?

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.