Про файтинги я бы поспорил, на геймпаде довольно неудобно. Для меня клава > аркадный стик > геймпад. А вот слешеры просто созданы для геймпадов(тот же MGR)
Шифруем поле в виде field=«001011020», только вместо «0 1 2» могут быть любые символы. Берем хэш от field и выдаем пользователю. Пользователь играет. После игры подгружается field, пользователь проверяет и всё.
Find a Number X whose sum with its digits is equal to N
Тут идет простой перебор, но перебор начинается с числа N-((порядок числа N)*9) и идет до N-1
static int[] GetNumbers(int N)
{
List<int> res = new List<int>();
int Order = 1;
int tmp = N;
while (tmp/10 != 0)
{
Order++;
tmp /= 10;
}
int start = N - Order * 9;
if (start < 0) start = 0;
for (int i = start; i < N; i++)
{
if (i+ GetSumOfDigits(i) == N)
{
res.Add(i);
}
}
return res.ToArray();
}
static int GetSumOfDigits(int N)
{
int res = 0;
while (N / 10 != 0)
{
res += N%10;
N /= 10;
}
res += N;
return res;
}
public bool IsPowerOfTwo(int Number) { return ((Number & 1) == 0) ? IsPowerOfTwo(Number >> 1) : Number == 1; }
Find an element in a sorted and rotated array
static int SearchInLeftPart(int[] Arr, int Number)
{
int BreakPointMin = Arr[Arr.Length - 1];
int BreakPointMax = Arr[0];
int Left = 0;
int Right = Arr.Length - 1;
int Med;
while (Left < Right)
{
Med = (Left + Right) / 2;
if (Arr[Med] == Number) return Med;
if (Arr[Med] <= BreakPointMin)
{
Right = Med - 1;
continue;
}
if (Arr[Med] > Number)
{
Right = Med - 1;
}
else
{
Left = Med + 1;
}
}
if (Arr[Left] == Number) return Left;
return -1;
}
static int SearchInRightPart(int[] Arr, int Number)
{
int BreakPointMin = Arr[Arr.Length - 1];
int BreakPointMax = Arr[0];
int Left = 0;
int Right = Arr.Length - 1;
int Med;
while (Left < Right)
{
Med = (Left + Right) / 2;
if (Arr[Med] == Number) return Med;
if (Arr[Med] >= BreakPointMax)
{
Left = Med + 1;
continue;
}
if (Arr[Med] > Number)
{
Right = Med - 1;
}
else
{
Left = Med + 1;
}
}
if (Arr[Left] == Number) return Left;
return -1;
}
static public int SearchInArr(int[] Arr, int Number)
{
int BreakPointMin = Arr[Arr.Length - 1];
int BreakPointMax = Arr[0];
if (BreakPointMin > BreakPointMax) return Array.BinarySearch(Arr, Number);
if (Number > BreakPointMin && Number < BreakPointMax) return -1;
if (Number <= BreakPointMin) return SearchInRightPart(Arr, Number);
else return SearchInLeftPart(Arr, Number);
}
В итоге получится перевезти 500 бананов, скормить верблюду 2400 и 100 останется в пустыне, если первые 500км каждые 100км провозить все что есть, возвращаясь назад.
0. 3000 бананов
100км. 2500 бананов (взял 1000 бананов с отметки 0 привез 900 бананов, взял 100 бананов, поехал на отметку 0, повторил)
200км. 2000 бананов
300км. 1700 бананов
400км. 1400 бананов
500км. 1100 бананов
Далее берем 1000 бананов и едем в конечный пункт
600км. 900 бананов
700км. 800 бананов
800км. 700 бананов
900км. 600 бананов
1000км. 500 бананов
Укажите на мою ошибку. В пресете plant 2 я вручную применил правила, и это тут же не сошлось. Там где синяя область, линия должна быть в 2 раза длиннее, посередине А-линия влево, на конце А-линия вправо, которая накладывается на начало зеленой области
Пятый ребус обидный(
Сами такие
</joke>
0. 3000 бананов
100км. 2500 бананов (взял 1000 бананов с отметки 0 привез 900 бананов, взял 100 бананов, поехал на отметку 0, повторил)
200км. 2000 бананов
300км. 1700 бананов
400км. 1400 бананов
500км. 1100 бананов
Далее берем 1000 бананов и едем в конечный пункт
600км. 900 бананов
700км. 800 бананов
800км. 700 бананов
900км. 600 бананов
1000км. 500 бананов