Послідовність Фібоначчі
Послідовність Фібоначчі задано так:
- a0 = 0
- a1 = 1
- ak = ak-1 + ak-2
Для заданого n знайти значення n-го
елемента an послідовності Фібоначчі.
Вхідні дані
Єдине натуральне число N (1 ≤ N ≤ 40).
Вихідні дані
N-ий елемент послідовності Фібоначчі.
Вхідні дані
Sample 1
2
Sample 2
5
Sample 3
8
Вихідні дані
Sample 1
1
Sample 2
5
Sample 3
21
static void Main(string[] args)
{
int n = int.Parse(Console.ReadLine());
int[] fib = new int[n + 1];
fib[0] = 0;
fib[1] = 1;
for (int i = 2; i <= n; i++)
{
fib[i] = fib[i - 1] + fib[i -
2];
}
Console.WriteLine(fib[n]);
}
Точка і прямокутник
Визначте,
чи належить точка (X, Y) прямокутнику
з кінцями діагоналі (
X1
, Y1
, X2
, Y2
) і
сторонами, паралельними координатним осям?
Вхідні дані
Шість
дійсних чисел
X
, Y
, X1
, Y1
, X2
, Y2
-
координати точки та координати кінців діагоналі прямокутника, відповідно.
Числові значення по модулю не перевищують 100.
Вихідні дані
Вивести 1, якщо точка
належить прямокутнику, або 0, якщо ні.
Вхідні дані
1 2 3 4 0 0
Вихідні дані
1
static void Main(string[] args)
{
string setir = Console.ReadLine();
var massiv = setir.Split(' ');
double x = double.Parse(massiv[0]);
double y = double.Parse(massiv[1]);
double x1 = double.Parse(massiv[2]);
double y1 = double.Parse(massiv[3]);
double x2 = double.Parse(massiv[4]);
double y2 = double.Parse(massiv[5]);
double minX = Math.Min(x1, x2);
double minY = Math.Min(y1, y2);
double maxX = Math.Max(x1, x2);
double maxY = Math.Max(y1, y2);
if (minX <= x && x <=
maxX && minY <= y && y <= maxY) Console.WriteLine(1);
else Console.WriteLine(0);
}
Клітинки в колі
На аркуші паперу в клітинку
намальовано коло з радіусом R і
з центром на перетині ліній клітинок. Скільки повних клітинок міститься у
даному колі.
Вхідні дані
В єдиному рядку записано
одне ціле невід'ємне число R -
радіус кола. 0 ≤ R ≤ 1000.
Вихідні дані
Одне число - кількість
цілих клітинок.
Вхідні дані
2
Вихідні дані
4
static void Main(string[] args)
{
double r=double.Parse(Console.ReadLine());
int answer = 0;
for (double x = 1; x < r; x = x + 1)
answer += (int)Math.Sqrt(r * r - x * x);
answer *= 4;
Console.WriteLine(answer);
}
Трикутник
Визначте, чи можна
отримати два трикутники з заданими довжинами сторін, розрізавши деякий
прямокутник одним розрізом і вільно обертаючи і перевертаючи отримані куски.
Вхідні дані
Cкладається з
двох рядків. Перший рядок містить три натуральних числа - довжини сторони
першої трикутника. Друга рядок містить три натуральних числа - довжини сторони
другого трикутника. Відомо, що трикутники є коректними. Всі довжини сторін не
більше 100.
Вихідні дані
Зведіть, чи існує
прямокутник, який можна було б розрізати на трикутники з заданими довжинами
сторін. Якщо такий прямокуник існує, виведіть ТАК. В противному випадку
виведіть НІ.
Пусть a,
b, c – длины сторон первого треугольника, d, e, f – длины сторон второго треугольника. Отсортируем стороны
треугольников так чтобы выполнялись неравенства a ≤ b ≤ c и d ≤ e ≤ f. Из двух треугольников можно сложить прямоугольник только если
их соответствующие стороны попарно равны (a = d, b = e, c = f) и
если оба треугольника являются прямоугольными (a2 + b2 = c2, d2 + e2 = f2).
static void Main(string[] args)
{
string s = Console.ReadLine();
var massiv = s.Split(' ');
int a = int.Parse(massiv[0]);
int b = int.Parse(massiv[1]);
int c = int.Parse(massiv[2]);
string ss = Console.ReadLine();
var massiv1 = ss.Split(' ');
int d = int.Parse(massiv1[0]);
int e = int.Parse(massiv1[1]);
int f = int.Parse(massiv1[2]);
int t;
if (a > c) { t = a; a = c; c =
t; }
if (b > c) { t = b; b = c; c =
t; }
if (a > b) { t = a; a = b; b =
t; }
if (d > f) {t
= d; d = f; f = t; }
if (e > f) {t = e; e = f; f = t; }
if (d > e) {t = d; d = e; e = t; }
Console.WriteLine((a == d && b
== e && c == f && a * a + b * b == c * c ? "YES\n" : "NO\n"));
Console.ReadKey(true);
}
Довжина вектора
Обчислити довжину вектора.
Вхідні дані
Чотири цілих числа
x1
, y1
, x2
, y2
- координати початку та кінця вектора відповідно. Усі
вхідні числа не перевищують за модулем 10000.
Вихідні дані
Одне число - довжина
заданого вектора з точністю до шести десяткових знаків.
Вхідні дані
1 1 2 2
Вихідні дані
1.414214
static void Main(string[] args)
{
string s = Console.ReadLine();
var massiv = s.Split(' ');
int x1 = int.Parse(massiv[0]);
int y1 = int.Parse(massiv[1]);
int x2 = int.Parse(massiv[2]);
int y2 = int.Parse(massiv[3]);
double d = Math.Sqrt(Math.Pow((x2 - x1), 2) + Math.Pow((y2 - y1), 2));
Console.WriteLine("{0:#.######}", d);
}
Належність точки променю
Визначте, чи належить
задана точка променю.
Вхідні дані
Містить шість цілих чисел -
координати точки та коррдинати початку та кінця вектора. Усі числа не
перевищують за модулем 10000.
Вихідні дані
Вивести YES, якщо точка
належить променю та NO у
протилежному випадку.
Вхідні дані #1
1 6 3 7 5 8
Вихідні дані #1
NO
static void Main(string[] args)
{
string s = Console.ReadLine();
var massiv = s.Split(' ');
int x0 = int.Parse(massiv[0]);
int y0 = int.Parse(massiv[1]);
int x1 = int.Parse(massiv[2]);
int y1 = int.Parse(massiv[3]);
int x2 = int.Parse(massiv[4]);
int y2 = int.Parse(massiv[5]);
if ((x0 - x1) * (y2 - y1) == (x2 -
x1) * (y0 - y1) &&
+(x0 - x1) * (x2 - x1) >= 0 &&
(y0 - y1) * (y2 - y1) >= 0) Console.WriteLine("YES\n");
else Console.WriteLine("NO\n");
}
Точка всередині круга
Перевірити, чи знаходиться
точка всередині круга.
Вхідні дані
У першому рядку задано
координати центра круга та його радіус. У другому рядку задано координати
точки A.
Усі числа цілі, не перевищують за модулем 1000.
Вихідні дані
Вивести "YES", якщо
точка A належить
кругу (з границями), і "NO"
інакше.
Вхідні дані #1
2 1 2
1 3
Вихідні дані #1
NO
static void Main(string[] args)
{
string s = Console.ReadLine();
var massiv = s.Split(' ');
int x0 = int.Parse(massiv[0]);
int y0 = int.Parse(massiv[1]);
int r = int.Parse(massiv[2]);
string ss = Console.ReadLine();
var massiv1 = ss.Split(' ');
int x = int.Parse(massiv1[0]);
int y = int.Parse(massiv1[1]);
if ((x - x0) * (x - x0) + (y - y0)
* (y - y0) <= r * r)
Console.WriteLine("YES\n");
else Console.WriteLine("NO\n");
}
Віднімання
Знайти різницю двох цілих невід`ємних чисел A та B.
Вхідні дані
У вхідному файлі задано два цілих невід`ємних числа A та B (B ≤ A ≤ 1010000),
кожне у своєму рядку.
Вихідні дані
У вихідний файл виведіть одне число, яке дорівнює різниці A та B.
Вхідні дані
5
3
Вихідні дані
static void Main(string[] args)
{
string s = Console.ReadLine();
var massiv = s.Split(' ');
BigInteger a = BigInteger.Parse(massiv[0]);
string ss = Console.ReadLine();
var massiv1 = ss.Split(' ');
BigInteger b = BigInteger.Parse(massiv1[0]);
Console.WriteLine(a-b);
}
Порівняння
Порівняйте два числа A та B.
Вхідні дані
У вхідному файлі задано два цілих невід`ємних числа A та B (A, B <= 1010000)
кожне у своєму рядку.
Вихідні дані
У вихідний файл виведіть "<", якщо A < B, "=", якщо A = B та ">", якщо A > B.
Вхідні дані
2
1
Вихідні дані
>
Належність точки відрізку
Визначити, чи належить
задана точка відрізку.
Вхідні дані
Шість цілих чисел -
координати точки і координати початку і кінця відрізку. Усі числа не
перевищують за модулем 10000.
Вихідні дані
Вивести "YES", якщо
точка належить відрізку, і "NO"
у протилежному випадку.
Вхідні дані #1
3 3 1 2 5 4
Вихідні дані #1
YES
Вхідні дані #2
3 3 1 2 5 3
Вихідні дані #2
NO
static void Main(string[] args)
{
string s = Console.ReadLine();
var massiv = s.Split(' ');
int x = int.Parse(massiv[0]);
int y = int.Parse(massiv[1]);
int x1 = int.Parse(massiv[2]);
int y1 = int.Parse(massiv[3]);
int x2 = int.Parse(massiv[4]);
int y2 = int.Parse(massiv[5]);
double l1, l2,l3;
l1 = Math.Sqrt(Math.Pow((x1 - x), 2) + Math.Pow((y1 - y), 2));
l2 = Math.Sqrt(Math.Pow((x2 - x), 2) + Math.Pow((y2 - y), 2));
l3 = Math.Sqrt(Math.Pow((x2 - x1), 2) + Math.Pow((y2 - y1), 2));
if (l3 == 0) Console.WriteLine("NO");
else
{
if (l3 == (l1 + l2)) Console.WriteLine("YES");
else
Console.WriteLine("NO");
}
//
Console.ReadLine();
}
Гармата
У
початку координат встановлено гармату, яка стріляє кульками для пінг-понгу. На
деякій відстані R від
неї, паралельно осі ОХ,
знаходиться цегляна стінка нескінченної довжини. Між стінкою і віссю OX розміщено
точкову ціль з координатами (X,Y). Потрібно
націлити гармату так, щоб кулька вдарилася спочатку об стінку, а потім попала в
ціль. Визначіть найкоротшу відстань від осі OY до точки
удару кульки в стінку.
Вхідні
дані
Перший
рядок містить кількість тестів. Для кожного тесту в окремому рядку міститься
три цілих числа R, X та Y (-10<=X<=10, 0<=Y<R<=10), відокремлених
пропусками.
Вихідні
дані
Для кожного тесту в окремому рядку вивести відстань по прямій
лінії від осі OY до
точки удару кульки в стіну з точністю до двох знаків після коми.
Вхідні дані
2
10 5 5
10 10 5
Вихідні дані
3.33
6.67
static void Main(string[] args)
{
int n = int.Parse(Console.ReadLine());
for (int i = 0; i < n; i++)
{
string s = Console.ReadLine();
var massiv = s.Split(' ');
double r = double.Parse(massiv[0]);
double x = double.Parse(massiv[1]);
double y = double.Parse(massiv[2]);
if (x < 0) x = -x;
Console.WriteLine("{0:N2}", r * x / (2 * r - y));
}
}
Йо-йо
Іграшка
йо-йо складається з катушки, на яку намотано нитку. Якщо, тримаючи за кінець
нитки, відпустити катушку, то вона буде, обертаючись, спочатку опускатись
донизу, а потім за інерцією підніматись вверх. Але висота, на яку катушка
підніметься, буде в k раз
меншою, ніж висота, з якої вона опустилась. Будемо вважати, що катушка
зупинилась, якщо висота її чергового підйому не перевищує 1.
Напишіть програму, яка за довжиною
нитки l та коефіцієнту k рахує кількість
підйомів катушки до зупинки. Наприклад, нехай l = 17, k = 2,
тоді катушка буде підніматись на висоти 8.5, 4.25, 2.125, 1.0625,
а потім зупиниться. Таким чином будемо мати 4 підйоми.
Вхідні дані
Два цілих числа l (1 ≤l ≤ 109)
та k (2 ≤ k ≤ 100).
Вихідні дані
Вивести одне число –
кількість підйомів.
Вхідні дані #1
17 2
Вихідні дані #1
4
static void Main(string[] args)
{
string w = Console.ReadLine();
var massiv = w.Split(' ');
double l = double.Parse(massiv[0]);
int k = int.Parse(massiv[1]);
int s = 0;
l = l / k;
while (l > 1)
{
s++;
l = l / k;
}
Console.WriteLine(s);
}
Кодування
Послідовність
бітів кодується наступним чином. Якщо значення попереднього біта заданої
послідовності відрізняється від значення поточного біта, що кодується, в
результуючу послідовність записується 1. Якщо значення бітів не
відрізняються, то записується 0.
Для першого біта послідовності попереднім є біт зі значенням 0.
Напишіть
програму, яка виконує кодування.
Вхідні
дані
Вводиться
рядок довжиною не більше 100 символів,
який складається лише з 0 і 1, який
представляє собою кодовану послідовність бітів.
Вихідні
дані
Вивести результат кодування.
Вхідні дані
10010111
Вихідні дані
11011100
static void Main(string[] args)
{
string s = Console.ReadLine();
int len = s.Length;
string c = s[0] == '0' ? "0" : "1";
for (int i = 1; i < len; i++)
{
c = (s[i] == s[i - 1]) ? c + "0" : c + "1";
}
Console.WriteLine(c);
}
Угадай число
Боб и его старший брат Альберт часто играют в игру
"Угадай число". Сначала Боб загадывает число K в диапазоне
от 1 до N. Потом Альберт
называет числа, а Боб говорит, является названное число больше или меньше
загаданного или Альберт назвал правильное число. Альберт для угадывания всегда
использует следующую стратегию.
1 шаг. Альберт задает A=1 и B=N
2 шаг. Альберт вычисляет M – целую часть среднего
арифметического чисел A и B
3 шаг. Альберт называет число M
4 шаг. Если Боб говорит "Меньше", то Альберт
полагает A=M+1 и переходит
к шагу 2
5 шаг. Если Боб говорит "Больше", то Альберт
полагает B=M−1 и переходит
к шагу 2
6 шаг. Если Боб говорит "Угадал", то игра
заканчивается
Например, пусть N=9, а задуманное
Бобом число K равно 6. Сначала A=1, B=9. Альберт
называет число 5 и
получает ответ "Меньше". Теперь A=6, B=9. Следующее
число-попытка 7.
Боб отвечает "Больше". Теперь A=6, B=6. Альберт
называет 6 и получает ответ "Угадал".
Напишите программу, которая определяет, сколько чисел
придется назвать Альберту, прежде чем он получит ответ "Угадал" от
Боба.
Входные данные
В первой строке входного файла содержатся два целых числа N (1 ≤ N ≤ 1000) и K (1 ≤ K ≤ N), разделенных
пробелом.
Выходные данные
В выходной файл
вывести одно целое число – количество названных Альбертом чисел до получения
ответа Боба "Угадал".
Вхідні дані
9 6
Вихідні дані
3
static void Main(string[] args)
{
string s = Console.ReadLine();
var massiv = s.Split(' ');
int n = int.Parse(massiv[0]);
int k = int.Parse(massiv[1]);
int a = 1;
int b = n;
int q = 1;
int m = (a + b) / 2;
while (m != k)
{
if (m > k) b = m - 1;
else a = m + 1;
m = (a + b) / 2;
q++;
}
Console.WriteLine(q);
}
Поставка содової води
Вхідні дані
Три
целі невід'ємні числа e, f, c, де e (e < 1000) - кількість
порожніх пляшок, які є у Тіма на початку дня, f (f < 1000) - кількість
порожніх пляшок, знайдених протягом дня, і c (1 < c < 2000) -
кількість порожніх пляшок, необхідних для покупки нової пляшки.
Вихідні дані
Скільки
пляшок содової води зможе випити Тім, коли його замучила спрага?
Вхідні дані #1
9 0 3
Вихідні дані #1
4
static void Main(string[] args)
{
string s = Console.ReadLine();
var massiv = s.Split(' ');
int e = int.Parse(massiv[0]);
int f = int.Parse(massiv[1]);
int c = int.Parse(massiv[2]);
int k = 0;
e = e + f;
while (c <= e)
{
int n = e / c;
e = n + e % c;
k = k + n;
}
Console.WriteLine(k);
}
Задача A + B
Знайдіть A + B.
Вхідні дані
У кожному рядку задано два
цілих числа A та B (|A|, |B| ≤ 30000). Дані
зчитуйте до кінця файлу.
Вихідні дані
Для
кожного наведеного прикладу виведіть суму A + B у окремому
рядку.
Вхідні дані #1
1 1
1 2
Вихідні дані #1
2
3
static void Main(string[] args)
{
string s = "";
while ((s = Console.ReadLine()) != null)
{
var massiv = s.Split(' ');
int a = int.Parse(massiv[0]);
int b = int.Parse(massiv[1]);
Console.WriteLine(a + b);
}
}
Кількість операцій
Визначити загальну
кількість операцій додавання (+),
віднімання (-)
та множення (*)
у заданому арифметичному виразі.
Вхідні дані
У єдиному рядку задано
арифметичний вираз без дужок та пропусків. Кількість символів у виразі не
перевищує 250.
Вихідні дані
Вивести кількість вказаних
операцій.
Вхідні дані #1
-1+2*3+a
Вихідні дані #1
3
static void Main(string[] args)
{
string s = Console.ReadLine();
s = s.TrimStart('-');
s = s.TrimStart('+');
int len = s.Length;
int k = 0;
for (int i = 0; i < len; i++)
{
if ((s[i] == '+') || (s[i] == '-') || (s[i] == '*')) k++;
}
Console.WriteLine(k);
}
Комментариев нет:
Отправить комментарий