Решение задачи "Кто выпьет n-ю Double Cola" - C#
Формулировка задачи:
Листинг программы
- string[] names = new string[] { "Sheldon", "Leonard", "Penny", "Rajesh", "Howard" };
- int n = 1;
- Line.WhoIsNext(names, n) --> "Sheldon"
- int n = 6;
- Line.WhoIsNext(names, n) --> "Sheldon"
- int n = 52;
- Line.WhoIsNext(names, n) --> "Penny"
- int n = 7230702951;
- Line.WhoIsNext(names, n) --> "Leonard"
Листинг программы
- static string Foo(string[] names, long n)
- {
- var result = Enumerable.Range(1, names.Length)
- .Select((m, i) => new { m, i })
- .ToDictionary(x => x.i, x=> (long)1);
- long k = 0;
- while (n>0)
- result = result.Select(i =>
- {
- if (n > 0)
- {
- n -= i.Value;
- if (n > 0)
- k = i.Key + 1 > names.Length - 1 ? 0 : i.Key + 1;
- }
- return i.Value * 2;
- })
- .Select((m, i) => new { m, i })
- .ToDictionary(x => x.i, x => x.m);
- return names[k];
- }
Может кто предложит более простой способ =)
Решение задачи: «Решение задачи "Кто выпьет n-ю Double Cola"»
textual
Листинг программы
- program p1;
- var a,b,k,l,d,e:integer;
- c:boolean;
- label l1;
- begin
- write('Type a, please ');
- readln(a);
- a:=(abs(a));
- write('Type b, please ');
- readln(b);
- If b>0 then
- begin
- k:=0;
- l:=0;
- repeat
- d:= (a mod 10);
- e:= (b mod 10);
- c:=(d=e);
- If C then
- begin
- k:=(d+k);
- l:=(e+l);
- a:=(a div 10);
- b:=(b div 10);
- end
- else
- begin
- writeln('Не входит');
- goto l1;
- end;
- until b=0;
- Writeln('Входит');
- l1:
- end
- else writeln('Вы офигели!! Отрицательных цифр в записе числа не бывает!')
- end.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д