1) Как построить дом?
1) Нужно приобрести материалы для стройки
2) Купить территорию, где строить
3) Заложить фундамент
4) Начать строить пол, потом стены, не забывать всё укреплять
5) поставить окна
6) сделать утепление
7) поставить двери, замки, сеентехнику, провести электричество
8) построить крышу
9) наклееть обои, и покрасить стены
10) поставить мебель
11) ГОТОВО!
2) Как покрасить крышу дома?
1) купить краску
2) развести краску
3) залесть на крышу
4) начать красить с дальнего угла крыши от лестницы
5) когда докрасишь, дать просохнуть
6) повторяешь шаги 4 и 5 пару раз
7) ГОТОВО!
3) Как заложить фундамент?
я не знаю
Числа Фибоначчи: циклом и рекурсией
Числа Фибоначчи – это ряд чисел, в котором каждое следующее число равно сумме двух предыдущих: 1, 1, 2, 3, 5, 8, 13, ... . Иногда ряд начинают с нуля: 0, 1, 1, 2, 3, 5, ... . В данном случае мы будем придерживаться первого варианта.
Формула:
F1 = 1
F2 = 1
Fn = Fn-1 + Fn-2
Пример вычисления:
F3 = F2 + F1 = 1 + 1 = 2
F4 = F3 + F2 = 2 + 1 = 3
F5 = F4 + F3 = 3 + 2 = 5
F6 = F5 + F4 = 5 + 3 = 8
...
Вычисление n-го числа ряда Фибоначчи с цикла while
Присвоить переменным fib1 и fib2 значения двух первых элементов ряда, то есть присвоить переменным единицы.
Запросить у пользователя номер элемента, значение которого он хочет получить. Присвоить номер переменной n.
Выполнять следующие действия n - 2 раз, так как первые два элемента уже учтены:
Сложить fib1 и fib2, присвоив результат переменной для временного хранения данных, например, fib_sum.
Переменной fib1 присвоить значение fib2.
Переменной fib2 присвоить значение fib_sum.
Вывести на экран значение fib2.
Примечание. Если пользователь вводит 1 или 2, тело цикла ни разу не выполняется, на экран выводится исходное значение fib2.
fib1 = 1
fib2 = 1
n = input("Номер элемента ряда Фибоначчи: ")
n = int(n)
i = 0
while i < n - 2:
fib_sum = fib1 + fib2
fib1 = fib2
fib2 = fib_sum
i = i + 1
print(fib2)
Компактный вариант кода:
fib1 = fib2 = 1
n = int(input("Номер элемента ряда Фибоначчи: ")) - 2
while n > 0:
fib1, fib2 = fib2, fib1 + fib2
n -= 1
print(fib2)
Вывод чисел Фибоначчи циклом for
В данном случае выводится не только значение искомого элемента ряда Фибоначчи, но и все числа до него включительно. Для этого вывод значения fib2 помещен в цикл.
fib1 = fib2 = 1
n = int(input())
if n < 2:
quit()
print(fib1, end=' ')
print(fib2, end=' ')
for i in range(2, n):
fib1, fib2 = fib2, fib1 + fib2
print(fib2, end=' ')
print()
Пример выполнения:
10
1 1 2 3 5 8 13 21 34 55
Рекурсивное вычисление n-го числа ряда Фибоначчи
Если n = 1 или n = 2, вернуть в вызывающую ветку единицу, так как первый и второй элементы ряда Фибоначчи равны единице.
Во всех остальных случаях вызвать эту же функцию с аргументами n - 1 и n - 2. Результат двух вызовов сложить и вернуть в вызывающую ветку программы.
def fibonacci(n):
if n in (1, 2):
return 1
return fibonacci(n - 1) + fibonacci(n - 2)
print(fibonacci(10))
Допустим, n = 4. Тогда произойдет рекурсивный вызов fibonacci(3) и fibonacci(2). Второй вернет единицу, а первый приведет к еще двум вызовам функции: fibonacci(2) и fibonacci(1). Оба вызова вернут единицу, в сумме будет два. Таким образом, вызов fibonacci(3) возвращает число 2, которое суммируется с числом 1 от вызова fibonacci(2). Результат 3 возвращается в основную ветку программы. Четвертый элемент ряда Фибоначчи равен трем: 1 1 2 3.
Объяснение:
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
internal static class Program
{
private const string glasnye_ = "aeiouy";
private const string soglasnye_ = "bcdfghjklmnpqrstvwxz";
private static void Main()
{
try
{
Console.WriteLine("Введите строку слов (любые символы будут считаться разделителями)");
var s = Console.ReadLine();
Console.WriteLine($"Гласных больше чем согласных:\n {Task1(s).Aggregate("", (current, t) => current + t.ToUpper() + " ")}");
Console.WriteLine();
Console.WriteLine($"Гласных больше чем согласных:\n {Task1Regex(s).Aggregate("", (current, t) => current + t.ToUpper() + " ")}");
Console.ReadLine();
}
catch(Exception e)
{
Console.WriteLine(e);
Console.ReadLine();
}
}
private static IEnumerable<string> Task1(string s)
{
Console.ForegroundColor = ConsoleColor.Cyan;
Console.WriteLine("Без регулярных выражений");
var words = s.Split(new[] {' ', '-', ',', '.', '*', ':', ';', '_'}, StringSplitOptions.RemoveEmptyEntries).ToList();
var sb = new StringBuilder();
for (var i = 0; i < words.Count; i++)
sb.AppendLine($"Слово[{i}] = {words[i].ToUpper()}");
Console.Write(sb.ToString());
var result = new List<string>();
foreach (var word in words)
{
var k = 0;
foreach (var c in word.ToLower().ToCharArray())
{
k += glasnye_.Contains(c) ? 1 : 0;
k -= soglasnye_.Contains(c) ? 1 : 0;
}
if (k > 0)
result.Add(word);
}
return result;
}
private static IEnumerable<string> Task1Regex(string s)
{
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine("С регулярными выражениями");
var ms = Regex.Matches(s, @"[A-z]+", RegexOptions.IgnoreCase);
var sb = new StringBuilder();
for (var i = 0; i < ms.Count; i++)
sb.AppendLine($"Слово[{i}] = {ms[i].Value.ToUpper()}");
Console.Write(sb.ToString());
var result = new List<string>();
for (var i = 0; i < ms.Count; i++)
{
var v = ms[i].Value;
var k = Regex.Matches(v, $"[{glasnye_}]", RegexOptions.IgnoreCase).Count;
k -= Regex.Matches(v, $"[{soglasnye_}]", RegexOptions.IgnoreCase).Count;
if (k > 0)
result.Add(v);
}
return result;
}
}