Софтуерно Инженерство
Loading...
+ Нов въпрос
stefanivanov95 avatar stefanivanov95 3 Точки

Въпрос относно "принтиране" на произволно число!

Днес един приятел на интервю за работа му казали да накоди код който да вади призволни числа  от 1 до 10 ...

Всеки път щом интервюиращи изпише дробно число ...

Искам да попитам някой може ли да ми напише вариант на код със " С# "  който да принтира всеки път различни числа но без някакви зависимусти от сорта на        (if (number = "0.5") Console.ReadLine("8") )     просто призволно ?

Няма да ходя на интервю ... Звучи лесно, реших да пробвам и ГРЕДА ? :D В бейсик съм но ми е интересно ??

Тагове:
2
Общи приказки
dvdty avatar dvdty 462 Точки
var num = Console.ReadLine();
Random random = new Random();
var test = 0.0;

if(double.TryParse(num, out test)) {
    Console.WriteLine(random.Next(0, 10));
}

Нещо такова?

0
irena01 avatar irena01 17 Точки

При такива въпроси се подразбира, че нямаш право да ползваш готовите библиотеки за генериране на произволни числа на съответните езици - като Random класа в C#. Понеже истински произволни числа (true random) не могат да бъдат генерирани от компютъра (според някои и от вселената), от теб се очаква да съчиниш алгоритъм, който само на пръв поглед генерира произволно число базирано на друг случаен вход (в случая числото, което интервюиращият въвежда), към което има изискване да се пада с еднаква вероятност между 1 и 10. Когато интервюиращият тества програмата ти, той не трябва да може да забележи някакъв pattern в генерирането на изхода ти (например да вадиш винаги първата цифра след десетичната запетая - 5.5022 -> 5, 30.873 -> 8). Трябва да превърнеш случайното дробно число в случайно цяло число от 1 до 10, без да си личи как е получено на пръв поглед. Има много възможни подходи, например да сумираш всички цифри преди и след десетичната запетая (103.17 -> (1 + 0 + 3) + (1 + 7) = 12), след което да разделиш модулно на 10 (12 % 10 = 2) и така от 103.17 се получава 2, което изглежда доста случайно, поне на пръв поглед. Ето още няколко теста:

7.04  ->  1
189.1  ->  9
1998.0114  ->  3
5.5  ->  10 (частен случай, ако остатъкът си остане 0 връщаш 10)

Машините в казината генерират случайни числа по същия принцип, но разбира се с много по-сложни алгоритми, за да се гарантира възможно най-автентична псевдо-случайност, което само по себе си звучи като парадокс. laugh

5
02/12/2017 23:30:50
stefanivanov95 avatar stefanivanov95 3 Точки

Много благодаря ! 

0