Решение задачи "Кто выпьет 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.