PDA

Просмотр полной версии : Небольшие интересные задачки ч.1


Sinyss
26.10.2013, 00:03
Итак, настали выходные, а значит надо заняться чем то забавным.
Предлагаю решить пару простых задачек, с которыми сможет справится даже начинающий:

Задание 1:
Посчитать сумму ряда чисел
S = 1/1! + 1/2! + ... + 1/n!
Где n - натуральное число.



Задание 2:
Я думаю все слышали про "счастливые" билетики, у которых сумма первых 3х чисел равна сумме 3х последних. Посчитайте, сколько их всего существует =)



Задание 3:
На вход подается парное число (2*N). Это число задает количество знаков на билетике. Посчитайте сколько будет "счастливых" билетиков среди билетов у которых 2*N цифр. N - любое число.


Выкладывайте свои решения под спойлером. ( тэг )
Вот мои решения:
PS: 2 и 3 задания можно сделать оптимальней, попробуйте улучшить )

[MORE="1я задача"]

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;
}