Решение задачи "Кто выпьет n-ю Double Cola" - C#

Узнай цену своей работы

Формулировка задачи:

Листинг программы
  1. string[] names = new string[] { "Sheldon", "Leonard", "Penny", "Rajesh", "Howard" };
  2. int n = 1;
  3. Line.WhoIsNext(names, n) --> "Sheldon"
  4. int n = 6;
  5. Line.WhoIsNext(names, n) --> "Sheldon"
  6. int n = 52;
  7. Line.WhoIsNext(names, n) --> "Penny"
  8. int n = 7230702951;
  9. Line.WhoIsNext(names, n) --> "Leonard"
Дан массив, в качестве примера. string[] names = new string[] { "Sheldon", "Leonard", "Penny", "Rajesh", "Howard" }; Задача такова: 5 друзей пошли пить пиво "Супер" Колу. Свойства этой колы таковы, что выпив ее человек дублируется. Втали друзья в стэк очередь друг за другом и давай пить попивать... В общем, пили они ее по очереди, первым начал Шелдон, заним Леонард и т.д. После того как Шелдон выпил колу, он, магическим образов" раздвоился, и два Шелдона пошли в конец очереди. И так их цепочка продолжается бесконечно. Входные данные состоят из массива, который содержит пять имен и одного целого числа n. (1 ≤ n ≤ 1000000000) необходимо вернуть имя человека, который пьет n-ую банку колы. Нумирация банок идет с 1.
Листинг программы
  1. static string Foo(string[] names, long n)
  2. {
  3. var result = Enumerable.Range(1, names.Length)
  4. .Select((m, i) => new { m, i })
  5. .ToDictionary(x => x.i, x=> (long)1);
  6. long k = 0;
  7. while (n>0)
  8. result = result.Select(i =>
  9. {
  10. if (n > 0)
  11. {
  12. n -= i.Value;
  13. if (n > 0)
  14. k = i.Key + 1 > names.Length - 1 ? 0 : i.Key + 1;
  15. }
  16. return i.Value * 2;
  17. })
  18. .Select((m, i) => new { m, i })
  19. .ToDictionary(x => x.i, x => x.m);
  20. return names[k];
  21. }
Довольно таки извращенно изощренно.

Может кто предложит более простой способ =)

Решение задачи: «Решение задачи "Кто выпьет n-ю Double Cola"»

textual
Листинг программы
  1. program p1;
  2. var a,b,k,l,d,e:integer;
  3. c:boolean;
  4. label l1;
  5. begin
  6. write('Type a, please ');
  7. readln(a);
  8. a:=(abs(a));
  9. write('Type b, please ');
  10. readln(b);
  11. If b>0 then
  12.        begin
  13. k:=0;
  14. l:=0;
  15. repeat
  16. d:= (a mod 10);
  17. e:= (b mod 10);
  18. c:=(d=e);
  19. If C then
  20. begin
  21. k:=(d+k);
  22. l:=(e+l);
  23. a:=(a div 10);
  24. b:=(b div 10);
  25. end
  26. else
  27. begin
  28. writeln('Не входит');
  29. goto l1;
  30. end;
  31. until b=0;
  32. Writeln('Входит');
  33. l1:
  34.        end
  35. else writeln('Вы офигели!! Отрицательных цифр в записе числа не бывает!')
  36. end.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4.429 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы