26.09.2016 - Data Types and Variables - проблем относно задача 7. Exchange Variable Values
Здравейте колеги,
Проблемът ми е относно задача 7 от упражненията за Data Types and Variables. Работя на Mac OS X, та да не се чудете, ако се различават първите редове от кода с тези на Windows. На пръв поглед изглежда да съм решил задачата без грешка, но като пусна кода в judge-а и ми дава - 0/100. Кодът е:
using System;
namespace Exchange_Variable_Values
{
class MainClass
{
public static void Main(string[] args)
{
int a = 5;
int b = 10;
int c;
Console.WriteLine("Before: a={0} b={1}", a,b);
c = a;
a = b;
b = c;
Console.WriteLine("After: a={0} b={1}",a,b);
}
}
}
Къде би трябвало да ми е грешката и да не би да не съм разбрал условието правилно. Използвах примерно решение от тук
Предварително се извинявам ако съм допуснал някоя глупава грешка.
Поздрави,
Жельо
Изглежда интересен кода ти. Може ли да поясниш малко повече или да го допишеш целия, че не мога да хвана логиката така много, както и третата променлива къде я вкарваме по този начин.
Използвал съм алгоритъм на евклид
целият код:
int a = int.Parse(Console.ReadLine());
int b = int.Parse(Console.ReadLine());
if (a % b != 0)
{
int oldB = b;
b = a % b;
a = oldB;
}
Console.WriteLine("Before:");
Console.WriteLine("a = {0}",b);
Console.WriteLine("b = {0}", a);
Console.WriteLine("After:");
Console.WriteLine("a = {0}", a);
Console.WriteLine("b = {0}", b);
Не съм чел условието на задачата , но по кода на колегата разбирам ,че А винаги е по-малко от Б.
В противен случей ако а е по-голямо кодът няма да ни свърши работа.
Идеята е ,че когато разделим а%б и а е по-малко винаги ,ще влезем в иф проверката , понеже винаги когато разделим по-малко число на по-голямо резултата ще е дробен, т.е. винаги ще е различен от 0. НО ако А=10 , Б=5 резултата ще е 0 и така няма да влезем в иф проверката и задачата ще е грешна. Друг пример: А=10, Б=3. Така пак ще влезем в иф проверката понеже резултата ще различен от 0. Резултата ще е 10%3 = 3 с остатък 1. Тоест резултата ще е 1. И когато принтираме А = Б(А=3), но Б ще е равно на 1
Следователно ако А=5 , Б=10 и ги разделим с % резултата ще е 0 с остатък А( в случея 5 ).
В иф проверката създаваме нова променлива която ще помни Б. oldB = b;
Б= а%б което е 5%10 което е 0 с остатък 5 тоест резултата е 5. Така Б става равно на А
И на третия ред в иф проверката А = oldB където oldB си е Б, тоест А става равно на Б, понеже Б = oldБ
След иф проверката смятам ,че ти е ясно какво се случва . Console.WriteLine("a = {0}", b); .............
Дано да си ме разбрал. Понеже обеснявам малко на криво :) и може да ти е трудно да ме разбереш