Итак, настали выходные, а значит надо заняться чем то забавным.
Предлагаю решить пару простых задачек, с которыми сможет справится даже начинающий:
Задание 1:
Посчитать сумму ряда чисел
S = 1/1! + 1/2! + ... + 1/n!
Где n - натуральное число.
Задание 2:
Я думаю все слышали про "счастливые" билетики, у которых сумма первых 3х чисел равна сумме 3х последних. Посчитайте, сколько их всего существует =)
Задание 3:
На вход подается парное число (2*N). Это число задает количество знаков на билетике. Посчитайте сколько будет "счастливых" билетиков среди билетов у которых 2*N цифр. N - любое число.
Выкладывайте свои решения под спойлером. ( тэг [MORE] )
Вот мои решения:
PS: 2 и 3 задания можно сделать оптимальней, попробуйте улучшить ) Ответы
public static void FirstWay(int k)
{
double s = 0;
for (int i = 1 ; i <= k; i++)
{
s += 1.0/Factorial(i);
}
Console.WriteLine(s);
}
private static int Factorial(int n)
{
if (n == 1)
return 1;
return n*Factorial(n - 1);
}
Для тех кто не любит рекурсию:
public static void SecondWay(int k)
{
double s = 0;
for (int i = 1; i <= k; i++)
{
double kurrent_factorial = 1;
for (int j = 1; j <=i; j++)
{
kurrent_factorial *= j;
}
s += 1.0 / kurrent_factorial;
}
Console.WriteLine(s);
}
public static void FirstWay()
{
int k = 0;
for (int i = 100000; i < 1000000; i++)
{
if (isItRight(i))
{
k++;
}
}
Console.WriteLine(k);
Console.ReadKey();
}
private static bool isItRight(int n)
{
// Выделяем последние 3 цифры
int l = 0;
for (int i = 0; i < 3; i++)
{
l += n%10;
n /= 10;
}
// Выделяем первые 3 цифры
int f = 0;
for (int i = 0; i < 3; i++)
{
f += n % 10;
n /= 10;
}
// Если последние = первым
if (f==l)
{
return true;
}
return false;
}
public static void FirstWay(int n)
{
int number = 1;
for (int i = 1; i < n; i++)
{
number = number*10;
}
int counter = 0;
for (int i = number; i < number*10; i++)
{
if (isItRight(i, n/2))
{
counter++;
}
}
Console.WriteLine(counter);
Console.ReadKey();
}
private static bool isItRight(int number, int n)
{
// Выделяем последние n цифры
int l = 0;
for (int i = 0; i < n; i++)
{
l += number % 10;
number /= 10;
}
// Выделяем первые n цифры
int f = 0;
for (int i = 0; i < n; i++)
{
f += number % 10;
number /= 10;
}
// Если последние = первым
if (f == l)
{
return true;
}
return false;
}