S3. Часто используемые эффективные алгоритмы

Ваше решение записывайте как комментарий к данной странице (пример оформления).
Операции ввода-вывода можно для данных задач не указывать. Результат присвойте переменной R. Все переменные — целые числа.
Решены задачи: 2,3 Не решены: 1,4,5

Задачи:

S3.1 Составить программу обмена значениями двух переменных величин.

S3.2. Cоставить программу обмена значениями трех переменных величин а, b, c по
следующим двум схемам: — есть решение.
а) b присвоить значение c, а присвоить значение b, с присвоить значение а;
б) b присвоить значение а, с присвоить значение b, а присвоить значение с.

S3.3. Дано вещественное число а. Пользуясь только операцией умножения, получить:
а) a4 за две операции;
б) a6  за три операции;
в) a7 за четыре операции;
г) a8  за три операции;
д) a9 за четыре операции;
е) a10  за четыре операции.

S3.4. Дано вещественное число a. Пользуясь только операцией умножения, получить:
а) a3 и a10 за четыре операции;
б) a4 и a20 за пять операций;
в) a5 и a13 за пять операций;
г) a5 и a19 за пять операций;
д) a2, a5 и a17 за шесть операций;
е) a4, a12 и a28 за шесть операций.

S3.5. Чему будет равно 1010 по Вашему алгоритму?

10 комментариев к “S3. Часто используемые эффективные алгоритмы”

  1. Вячеслав Рычков

    S3.3. Дано вещественное число а. Пользуясь только операцией умножения, получить:
    а) a4 за две операции;

    int R=a*a;
    R=R*R;
    
  2. Дмитрий

    S3.2 Составить программу обмена значениями трех переменных величин а, b, c по следующим двум схемам:
    а) b присвоить значение c, а присвоить значение b, с присвоить значение а;

    int a = 143;
    int b = 598;
    int c = 732;
    int buffer = a;
    a = b;
    b = c;
    c = buffer;
    

    S3.2 Составить программу обмена значениями трех переменных величин а, b, c по следующим двум схемам: — есть решение.
    б) b присвоить значение а, с присвоить значение b, а присвоить значение с.

    int a = 143;
    int b = 598;
    int c = 732;
    int buffer = a;
    a = c;
    c = b;
    b = buffer;
    
    1. Вячеслав Рычков

      Все верно, Дмитрий. Кольцевые перестановки в двух направлениях. А теперь сделайте для массива!

  3. S3.2. Составить программу обмена значениями трех переменных величин а, b, c по следующим двум схемам: — есть решение.
    а) b присвоить значение c, а присвоить значение b, с присвоить значение а;
    б) b присвоить значение а, с присвоить значение b, а присвоить значение с.

    int a, b, c;
    int buffer;
    Console.WriteLine("Введите значение первого числа: ");
    a = int.Parse(Console.ReadLine());
    Console.WriteLine("Введите значение второго числа: ");
    b = int.Parse(Console.ReadLine());
    Console.WriteLine("Введите значение третьего числа: ");
    c = int.Parse(Console.ReadLine());
    Console.WriteLine($"a = {a} b = {b} c = {c} ");
    buffer = a;    
    a = b;
    b = c;
    c = buffer;
    Console.WriteLine($"a = {a} b = {b} c = {c} ");
    1. Вячеслав Рычков

      Сергей!
      Задача а) решена полностью. А посмотрите решение Дмитрия перед Вашим: та же самая перестановка (это суть алгоритма — четыре оператора).

  4. Богдан

    S3.3. Дано вещественное число а. Пользуясь только операцией умножения, получить:

                int r, a = 2;
                // а) a ^ 4 за две операции;
                r = a * a;
                r *= r;
                Console.WriteLine(r);
                // б) a ^ 6  за три операции;
                r = a * a;
                r = r * a;
                r *= r;
                Console.WriteLine(r);
                // в) a ^ 7 за четыре операции;
                r = a * a;
                r = r * a;
                r *= r;
                r = r * a;
                Console.WriteLine(r);
                // г) a ^ 8  за три операции;
                r = a * a;
                r *=  r ;
                r *= r;
                Console.WriteLine(r);
                // д) a ^ 9 за четыре операции;
                r = a * a;
                r *= r;
                r *= r;
                r = r * a;
                Console.WriteLine(r);
                // е) a ^ 10  за четыре операции.
                r = a * a;
                r *= r;
                r *= a;
                r = r * r;
                Console.WriteLine(r);
    
    1. Вячеслав Рычков

      Богдан, в целом идеи верные. Чуть исправил, a — вход, r — выход.

  5. Павел

    Изучаю C# 3 день, вот что у меня получилось.
    S3.3. Дано вещественное число а. Пользуясь только операцией умножения, получить a^n:

                double[] array = new double[1];
                uint degree;
                double count, result;
                Console.WriteLine("Введите число");
                count = double.Parse(Console.ReadLine());
                Console.WriteLine("Введите степень");
                degree = uint.Parse(Console.ReadLine());
                for (int i = 0; i < degree; i++)
                {
                    result = count;
                    for (int j = 0; j < degree; j++)
                    {
                        array[0] = result;
                        result *= count;
                    }
                }
                Console.WriteLine(array[0]);
                Console.ReadKey();
    
    1. Вячеслав Рычков

      Павел, в целом для начала неплохо. Вы написали код для любого целого числа degree. Более коротко то же самое можно сделать в одном цикле, не объявляя массив:

      uint degree;
      double count, result;
      Console.Write("Введите число");
      count = double.Parse(Console.ReadLine());
      Console.Write("Введите степень");
      degree = uint.Parse(Console.ReadLine());
      result = 1;
      for (int i = 0; i < degree; i++)
          result *= count;
      Console.WriteLine("ответ - " + result);
      Console.ReadKey();

      Но то, что предложил Богдан (см. чуть выше), более точно соответствует заданию.
      У него a^8 вычисляется за три операции умножения, у Вас за 8, и т.д.

Добавить комментарий для Богдан Отменить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Пролистать наверх