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 по Вашему алгоритму?


NEW: Наш Чат, в котором вы можете обсудить любые вопросы, идеи, поделиться опытом или связаться с администраторами.


Понравилась статья? Поделиться с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о

48 комментариев
Новые
Старые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
S3.1 Составить программу обмена значениями двух переменных величин.

int a = 2, b = 3;

b += a; // 5
a = b - a; // 5 - 2 = 3
b = b - a; // 5 - 3 = 2

Вот так проще, без арифметики и вычислений.
int a, b, c;
c = a;
a = b;
b = c;

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

using System;
public class Vladislav{
  public static void Main(){
  double a1, a2, a3, a4, a5, a6, f;
  Console.Write(«Введите a: «);
  double g = Convert.ToDouble(Console.ReadLine());
  f = g*g;
  a1 = f*f;
  System.Console.WriteLine($»1) {a1}.»);
  a2 = a1*g*g;
  System.Console.WriteLine($»2) {a2}.»);
  a3 = a1*g*g*g;
  System.Console.WriteLine($»3) {a3}.»);
  a4 = a2*g*g;
  System.Console.WriteLine($»4) {a4}.»);
  a5 = f*a1*f*g;
  System.Console.WriteLine($»5) {a5}.»);
  a6 = a1*a1*g*g;
  System.Console.WriteLine($»6) {a6}.»);
}
}

Последний раз редактировалось 1 год назад Владислав ем

Возможно, что-то все-таки не так понял
S3.1
int a=int.Parse(Console.ReadLine());
int b=int.Parse(Console.ReadLine());
int tmp=b;
a=b;
b=tmp;

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

      double r, a = 10;
      //10 000 000 000

      r = a*a;//100
      Console.WriteLine(r);
      r *= r;//10000
      Console.WriteLine(r);
      r *= r;//100000000
      Console.WriteLine(r);
      r *= a*a;//10 000 000 000
      Console.WriteLine(r);

Добрый день, возможно я не поняла условие задачи, если так, не могли бы вы объяснить. Спасибо!

//S3.4.Дано вещественное число a.Пользуясь только операцией умножения, получить:
      double r, a = 2;
      //а) a3 и a10 за четыре операции;
      //2^3 = 8,2^10 = 1024

      r = a * a;//4
      r *= a;//8
      r *= r * r;//512
      r = r * a;//1024
      Console.WriteLine(r);

      //б) a4 и a20 за пять операций;
      //2^4 = 16,2^20 = 1048576

      r = a * a;//4
      r *= a * a;//16
      r *= r * a;//512
      r *= r * a;//524288
      r = r * a;//1048576
      Console.WriteLine(r);

      //в) a5 и a13 за пять операций;
      //2^5 = 32,2^13 = 8192

      r = a * a;//4
      r *= r * a;//32
      r *= r * a;//2048
      r *= a;//4096
      r *= a;//8192
      Console.WriteLine(r);

      //г) a5 и a19 за пять операций;
      //2^5 = 32,2^19 = 524288

      r = a * a;//4
      r *= r * a;//32
      r *= r * r;//32768
      r *= a * a;//131072
      r *= a * a;//524288
      Console.WriteLine(r);

      //д) a2, a5 и a17 за шесть операций;
      //2^2 = 4,2^5 = 32,2^17 = 131072

      r = a * a;//4
      r *= r * a;//32
      r *= r * a;//2048
      r *= a * a;//8192
      r *= a * a;//32768
      r *= a * a;//131072
      Console.WriteLine(r);

      //е) a4 , a12 и a28 за шесть операций.
      //2^4 = 16,2^12 = 4096,2^28 = 268435456

      r = a * a;//4
      r *= a * a;//16
      r *= r * r;//4096
      r *= a;//8192
      r *= a;//16384
      r *= r;//268435456
      Console.WriteLine(r);

{
      Console.WriteLine(«Введите значения a и b они поменяются местами»);
      int a = int.Parse(Console.ReadLine());
      int b = int.Parse(Console.ReadLine());
      (a,b) = (b,a);
      Console.WriteLine($»a = {a}, b = {b}»);
      Console.ReadKey();
    }

S3.1

static void Main(string[] args)
    {
      int a = 200;
      int b = 450;
      Exchange(ref a, ref b);
      Console.WriteLine($»a = {a}, b = {b}»);
    }

    public static void Exchange(ref int a, ref int b) => (a, b) = (b, a);

Последний раз редактировалось 2 лет назад Сергей ем

S3.1

float a,b;
            a = Convert.ToSingle(Console.ReadLine()); // -5
            b = Convert.ToSingle(Console.ReadLine()); // 6

            Console.WriteLine(«Было введено: a={0}   b={1}»,a,b);

            b = b + a; // 1
            a = ba; // 6
            b = ba; // -5

            Console.WriteLine(«Обмен переменных: a={0}   b={1}»,a,b);

int a = 5;
      int b = 11;
      int c = 99;

      int d = a + b + c ;
      b = d — b — a;
      a = d — c — a;
      c = d — a — b;

      Console.WriteLine($»переменная а{a} \nпеременная b {b} \n переменная с {c}»);

      int a = 5;
      int b = 11;
      int c = (a + b);
      b = c — b;
      a = c — a;
      Console.WriteLine($»переменная а{a} \nпеременная b {b}»);

что значит обмен значениями?

3.2a

static void Main(string[] args)
    {
      int a = 45, b = 35, c = 66;

      a = a + b + c;
      c = a — c;
      b = a + b;
      a = b — a;
      c = a + c;
      b = b — c;
      c = c — a;
      c = c — a;

      Console.WriteLine($»a = {a} b = {b} c = {c}»);
    }

Последний раз редактировалось 2 лет назад Виталий ем
using System;
class HelloWorld {
 static void Main() {
   
   
  int a = Convert.ToInt32(Console.ReadLine());
  int b = Convert.ToInt32(Console.ReadLine());
  int c = Convert.ToInt32(Console.ReadLine());
  
  (a , b , c) = (b , c , a);
   
   
  Console.WriteLine(a + " " + b + " " + c);
   
  (b , c , a) = (a , c , b);
   
  Console.WriteLine(a + " " + b + " " + c);
 }
}
Последний раз редактировалось 2 лет назад Автор ем

Владимир, первая часть — верно. Во второй — напутали немного.

using System;
class HelloWorld {
 static void Main() {
   
   
  int num_1 = Convert.ToInt32(Console.ReadLine());
  int num_2 = Convert.ToInt32(Console.ReadLine());
  
  (num_1, num_2) = (num_2,num_1);
   
  Console.WriteLine(num_1 + " " + num_2);
 }
}
Последний раз редактировалось 2 лет назад Автор ем

Владимир, все верно. А знаете как это сделать через промежуточную переменную?

П.С. Лучше не использовать нижнее подчеркивание в именах переменных. Используйте лучше camelCase.

Последний раз редактировалось 2 лет назад Автор ем
int a, b, c,temp;
a = 100;
b = 200;
c = 300;
temp = a;
b = c;
a = b;
c = temp;

// VS подчеркивает b — ненужное присваивание значения b
уходит ошибка если поменять местами b = c; с a = b;

Serj, не совсем верно. VS подчеркивает и указывает вам на ошибки в алгоритме. А конкретно: значения a и b будут одинаковыми, а вам нужно сделать циклический обмен значениями.

Console.WriteLine(«#1»);
double a, b, c;
Console.Write(«Введите а: «);
a = Convert.ToDouble(Console.ReadLine());
Console.Write(«Введите b: «);
b = Convert.ToDouble(Console.ReadLine());
c = a;
a = b;
b = c;
Console.WriteLine($»a={a}, b={b}»);

Console.WriteLine(«#2a»);
double a, b, c, d;
Console.Write(«Введите а: «);
a = Convert.ToDouble(Console.ReadLine());
Console.Write(«Введите b: «);
b = Convert.ToDouble(Console.ReadLine());
Console.Write(«Введите c: «);
c = Convert.ToDouble(Console.ReadLine());
d = b;
b = c;
c = a;
a = d;
Console.WriteLine($»a={a}, b={b}, c={c}»);

Console.WriteLine(«#2b»);
double a, b, c, d;
Console.Write(«Введите а: «);
a = Convert.ToDouble(Console.ReadLine());
Console.Write(«Введите b: «);
b = Convert.ToDouble(Console.ReadLine());
Console.Write(«Введите c: «);
c = Convert.ToDouble(Console.ReadLine());
d = b;
b = a;
a = c;
c = d;
Console.WriteLine($»a={a}, b={b}, c={c}»);

Console.WriteLine(«#3»);
int a, A, b, B, c, C, d, D;
Console.Write(«Введите а: «);
a = Convert.ToInt32(Console.ReadLine());
A = a * a;
A = A * A;
Console.WriteLine(«а в 4 степени = » + A);

A = a * a;
b = A * A;
B = b * A;
Console.WriteLine(«а в 6 степени = » + B);

A = a * a;
b = A * A;
B = b * A;
c = B * a;
Console.WriteLine(«а в 7 степени = » + c);

A = a * a;
b = A * A;
B = b * b;
Console.WriteLine(«а в 8 степени = » + B);

A = a * a;
b = A * A;
B = b * b;
c = B * a;
Console.WriteLine(«а в 9 степени = » + c);

A = a * a;
b = A * A;
B = b * b;
c = B * A;
Console.WriteLine(«а в 10 степени = » + c);

Console.WriteLine(«#4»);
int a, A, b, B, c, C, d, D;
Console.Write(«Введите а: «);
a = Convert.ToInt32(Console.ReadLine());
A = a * a;
b = A * a;
B = A * b;
c = B * B;
Console.WriteLine($»а в 3 степени = {b}, а в 10 степени = {c} «);

A = a * a;
b = A * A;
B = b * a;
c = B * B;
C = c * c;
Console.WriteLine($»а в 4 степени = {b}, а в 20 степени = {C} «);

A = a * a;
b = A * A;
B = b * a;
c = b * b;
C = c * B;
Console.WriteLine($»а в 5 степени = {B}, а в 13 степени = {C} «);

A = a * a;
b = A * A;
B = b * A;
c = B * B;
C = c * B;
d = C * b;
Console.WriteLine($»а в 5 степени = {B}, а в 19 степени = {C} «); //не знаю как за пять

A = a * a;
b = A * A;
B = b * A;
c = B * B;
C = c * B;
d = C * A;
Console.WriteLine($»а в 2 степени = {A}, а в 5 степени = {B}, а в 17 степени = {d} «);

A = a * a;
b = A * A;
B = b * b;
c = B * b;
C = c * c;
d = C * b;
Console.WriteLine($»а в 4 степени = {b}, а в 12 степени = {c}, а в 28 степени = {d} «);

Console.WriteLine(«#5»);
int a = 10, A, b, B, c;
A = a * a;
b = A * A;
B = b * b;
c = B * A;
Console.WriteLine(«10 в 10 степени = » + c);

S3.5/ Умножение не интересно и не эффективно:

int Desired_Number = 10;
Console.WriteLine(Math.Pow(Desired_Number, 10));

Можно и аналогично перестановке в S3,1
S3.2 б)

int a = 5;
int b = 7;  
int c = 10;
a = b - a + (b = a);
a = c - a + (c = a);

S3.1
int a;
int b;
a = b — a + (b = a);

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

static void Main(string[] args)
{
   Console.WriteLine("Введите число для возведения его в 3 и 10 степень\n");
   int a = Convert.ToInt32(Console.ReadLine());
   int c = a; //Первая степень числа
   int d = a *= a; //Квадрат
   a *= a / c; // четвертая степень минус первая
   Console.WriteLine($"\nКуб числа {c} равен {a}\n");
   a *= a * d * d; // Восьмая степень плюс вторая
   Console.WriteLine($"Число {c}  в десятой степени равно { a}\n");
   Console.ReadKey();
}

S 3.4

int a = 2, a2, a3, a4, a5, a8, a12, a10, a16, a20, a13, a19, a17, a28;
Console.WriteLine("a) Решение задания 3.4 — Дано вещественное число a. " +
"Пользуясь только операцией умножения, получить:");
Console.WriteLine("а) a ^ 3 и a^10 за четыре операции");
a2 = a * a;
a3 = a2 * a;
a5 = a2 * a3;
a10 = a5 * a5;
Console.WriteLine("при a = 2 a ^ 3 ={0}, a ^ 10 ={1}", a3, a10);
Console.WriteLine("б) a ^ 4 и a^20 за пять операций");
a2 = a * a;
a4 = a2 * a2;
a8 = a4 * a4;
a16 = a8 * a8;
a20 = a16 * a4;
Console.WriteLine("при a = 2 a ^ 4 ={0}, a ^ 20 ={1}", a4, a20);
Console.WriteLine("в) a ^ 5 и a^13 за пять операций");
a2 = a * a;
a3 = a2 * a;
a5 = a2 * a3;
a10 = a5 * a5;
a13 = a10 * a3;
Console.WriteLine("при a = 2 a ^ 5 ={0}, a ^ 13 ={1}", a5, a13);
Console.WriteLine("г) a ^ 5 и a^19 за пять операций");
 Console.WriteLine("Для a ^ 19 за пять операций нет решения!\n" +
"«минимально требуется 6 операций:");
a2 = a * a;
a3 = a2 * a;
a5 = a3 * a2;
a8 = a3 * a5;
a16 = a8 * a8;
a19 = a16 * a3;
Console.WriteLine("при a = 2 a ^ 5 ={0}, a ^ 19 ={1}", a5, a19);
a2 = a * a;
a4 = a2 * a2;
a8 = a4 * a4;
a16 = a8 * a8;
a17 = a16 * a;
a5 = a4 * a;
Console.WriteLine("при a = 2 a ^ 2 ={0}, a ^ 5 ={1}, a ^ 17 ={2}", a2, a5, a17);
Console.WriteLine("е) a ^ 4, a ^ 12 и a^28 за шесть операций");
a2 = a * a;
a4 = a2 * a2;
a8 = a4 * a4;
a12 = a8 * a4;
a16 = a8 * a8;
a28 = a16 * a12;
Console.WriteLine("при a = 2 a ^ 4 ={0}, a ^ 12 ={1}, a ^ 28 ={2}", a4, a12, a28);
Console.ReadKey();

А можно эту задачу решить для сокращения кода, использованием буфера?

Serj, лучше использовать переменные как в условии. Это важно для этой задачи.

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

int a = 3, b = 6;
a += b;
b = a - b;
a -= b;
Console.WriteLine($"1. a = {a}, b = {b}");
int A, B, reverse;
Console.Write("Enter first number: ");
A = int.Parse(Console.ReadLine());
Console.Write("Enter second number: ");
B = int.Parse(Console.ReadLine());
reverse = A;
A = B;
B = reverse;
Console.WriteLine($"First number is {A}, second is {B}");
Console.ReadKey();

А это не верно?

Изучаю 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();

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

Класс! \ (•◡•) /

Если создавать переменные, а не перезаписывать их, является ли такой код валидным, для того, кто еще не проходил даже операции инкремента?

double a = Convert.ToDouble(Console.ReadLine());
double result2 =a*a;
double result4 = result2 * result2;
double result8 = result4 * result4;
double result10 = result8*result2;
Console.WriteLine(result10);

Спасибо за ответ. Просто обратил внимание в комментариях большинство перезаписывают переменные. Только начинаю свой путь, и хотел бы с нуля уже привыкать к читабельному коду.

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

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;
48
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x