powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Несколько тривиальных задач из школьного курса
9 сообщений из 9, страница 1 из 1
Несколько тривиальных задач из школьного курса
    #38765900
BlackStone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет форумчани!
Волей случая пришлось мне решить несколько простых алгоритмических задач, мне это было интересно с целью «умственной» гимнастики, так сказать «пошевелить» извилины, предлагаю желающим последовать моему примеру и предложить свои варианты решений, было бы интересно увидеть новые варианты или получить замечания по текущим. Для реализации алгоритмов я выбрал C# и T-SQL, хотя каждый волен писать на том, что ему больше подходит.

Задача
Объявлены две числовые переменные A и B. Необходимо сделать так, чтобы без объявления других переменных в результате работы алгоритма переменная A приняла минимальное значение из A и B, а переменная B – максимальное. Применять можно только операции присваивания, арифметические операции и любые стандартные математические функции (использование операторов запрещено).
Решение
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
static void Main(string[] args)
{
    int A = 100;
    int B = 50;           

    Console.WriteLine("Начальные значения:\t A={0}, B={1}",A,B);

    A = A + B;
    B = A - (int)Math.Pow((A - B) / (A - (A - B)), ((A - (A - B)) / (A - B))) * B - (int)Math.Pow((A - (A - B)) / (A - B), (A - B) / (A - (A - B))) * (A - B);
    A = A - B;

    Console.WriteLine("Конечные значения:\t A={0}, B={1}", A, B);

    Console.ReadKey();
}



Задача
За один цикл вычислить значение функции F(n)=1!*2!*…*n! , где n! – факториал (1*2*…*n)
Решение
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
        
static int Factorial(int ANumber)
{
    int AValue = 1;

    for (int Idx = 2; Idx <= ANumber; Idx++)
    {
        AValue = AValue * Idx;
    }

    return AValue * (ANumber > 1 ? Factorial(ANumber - 1) : 1);
}

static void Main(string[] args)
{
    byte N = 4;
    Console.WriteLine("Результат:{0}", Factorial(N));
    Console.ReadKey();
}



Задача
Определить число k, которое отсутствует в неупорядоченном массиве чисел (0, 1,...k-1,k+1,...n) за один цикл
Решение
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
static void Main(string[] args)
{
    int[] A = new int[10] { 0, 3, 2, 5, 4, 6, 8, 9, 10, 1 };

    int? K = null; int J = 0;
    for (int I = 0; I < A.Length; I++)
    {
        if (K != null)
        {
            if (A[I] == K)
            {
                I = J; K = null;
            }
        }
        else if (I < A.Length - 1 && A[I] + 1 == A[I + 1] - 1)
        {
            K = A[I] + 1; J = I; I = 0;
        }
    }
    Console.WriteLine("{0}", K);

    Console.ReadKey();
}



Задача
Задана таблица T ( ID Int, String VarChar(MAX) )
и произвольную строку @StrSearch. Необходимо вывести следующую информацию в виде: [ID] [String] [Quantity] [Percent], где
[ID] [String] - поля таблицы T, в которых присутствуют совпадения со строкой @StrSearch
[Quantity] количество встречающихся совпадений по каждой записи для строки @StrSearch
[Percent] процент количества совпадений для каждой записи от общего количества совпадений по всей таблице
Решение
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
DECLARE @T TABLE 
(
  [ID] Int IDENTITY(1,1),
  [String] VarChar(200) 
) 

INSERT INTO @T([String]) VALUES
('мама мыла раму'),
('раму мыла мама'),
('мама раму мыла и мыла и мыла...')

DECLARE @StrSearch VarChar(100) = 'мыла'

;WITH CTE AS 
(
  SELECT 
   [ID],
   [String]     = CAST(SUBSTRING ( [String], 1, CHARINDEX ( @StrSearch, [String] ) - 1 ) + SUBSTRING ( [String], CHARINDEX ( @StrSearch, [String] ) + LEN ( @StrSearch ), LEN ( [String] ) ) AS VarChar(200)),
   [Count]      = 1
  FROM   @T
  WHERE  CHARINDEX ( @StrSearch, [String] ) > 0
  UNION ALL 
  SELECT 
   [ID]         = CTE.[ID],
   [String]     = CAST(SUBSTRING ( CTE.[String], 1, CHARINDEX ( @StrSearch, CTE.[String] ) - 1 ) + SUBSTRING ( CTE.[String], CHARINDEX ( @StrSearch, CTE.[String] ) + LEN ( @StrSearch ), LEN ( CTE.[String] ) ) AS VarChar(200)),
   [Count]      = [Count] + 1
  FROM   CTE 
  INNER JOIN @T T ON T.[ID] = CTE.[ID] 
  WHERE  CHARINDEX ( @StrSearch, CTE.[String] ) > 0
) 
SELECT 
  '[ ' + CAST(T.[ID] AS VarChar) + ' ] [ ' + T.[String] + ' ] [ ' + CAST(ISNULL(Q.[Value], 0) AS VarChar) + ' ] [ ' + CAST(ISNULL(Q.[Value] * 100 / M.[Value], 0) AS VarChar) + '% ]'
FROM @T T
LEFT  JOIN (SELECT [Value] = SUM([Value]) FROM (SELECT [Value] = MAX([Count]) FROM CTE GROUP BY [ID]) T) M ON 1 = 1
OUTER APPLY (SELECT [Value] = MAX([Count]) FROM CTE WHERE [ID] = T.[ID]) Q
...
Рейтинг: 0 / 0
Несколько тривиальных задач из школьного курса
    #38766033
Фотография Яростный Меч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
во второй задаче (в решении) итоговая сложность явно больше одного цикла.
там надо примерно так:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
static int Factorial(int ANumber)
{
    int currentFac = 1;
    int p = 1;

    for (int Idx = 2; Idx <= ANumber; Idx++)
    {
        currentFac = currentFac * Idx;
        p = p * currentFac;
    }

    return p;
}




третья тоже неверно (если переставить 6 и 8 местами, остается нулл). Там всё просто - из n*(n-1)/2 вычитаем сумму элементов массива, полученную в цикле.
...
Рейтинг: 0 / 0
Несколько тривиальных задач из школьного курса
    #38766110
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlackStoneОбъявлены две числовые переменные A и B. Необходимо сделать так, чтобы без объявления других переменных в результате работы алгоритма переменная A приняла минимальное значение из A и B, а переменная B – максимальное. Применять можно только операции присваивания, арифметические операции и любые стандартные математические функции (использование операторов запрещено).
Код: vbnet
1.
2.
3.
A = A + B 
B = A - SQRT((A-2*B)^2)
A = A - B
...
Рейтинг: 0 / 0
Несколько тривиальных задач из школьного курса
    #38766173
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и автор нафлудил букв.

Ладно. Вопрос.
Объявлены две числовые переменные A и B. Необходимо сделать так, чтобы без объявления других переменных в результате работы алгоритма переменная A приняла минимальное значение из A и B, а переменная B – максимальное. Применять можно только операции присваивания, арифметические операции и любые стандартные математические функции ( использование операторов запрещено ).
Насколько я понял речь идёт о своей реализации max(a,b), min(a,b).
Из курса булевой алгебры я помню что AND/OR аналогичны max/min
в пространстве одномерной булевой переменной. Можно на этом сыграть.

Но вопросы по тексту. Почему нельзя использовать "операторы"? Плюс
и Минут - это операторы? А коньюнкция дизъюнкция?

А квадратный корень - операция? Или функция?

А ветвления? Основные строительные блоки алгоритмов? if-else.
А тернарные операции?
...
Рейтинг: 0 / 0
Несколько тривиальных задач из школьного курса
    #38766202
Фотография Яростный Меч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaBlackStoneОбъявлены две числовые переменные A и B. Необходимо сделать так, чтобы без объявления других переменных в результате работы алгоритма переменная A приняла минимальное значение из A и B, а переменная B – максимальное. Применять можно только операции присваивания, арифметические операции и любые стандартные математические функции (использование операторов запрещено).
Код: vbnet
1.
2.
3.
A = A + B 
B = A - SQRT((A-2*B)^2)
A = A - B

для (5,3) не работает - В станет равно 6.

вот так вроде норм.:
Код: c#
1.
2.
3.
4.
A = A + B;
B = Abs(A-2*B);
A = (A - B) / 2;
B = А + В;



Abs - абсолютная величина, если чо - заменяем на SQRT((A-2*B)^2)
...
Рейтинг: 0 / 0
Несколько тривиальных задач из школьного курса
    #38793304
BlackStone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Большой спасибо Яростному Мечу за толковые пояснения к решению предложенных задач, хотелось бы отметить, что по условию второй задачи не допускалось использование второго цыкла, а использование рекурсии не оговаривалось, хотя соглашусь, что вполне можно было обойтись без нее.
...
Рейтинг: 0 / 0
Несколько тривиальных задач из школьного курса
    #38793325
BlackStone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В продолжении темы предлагаю очередную задачу на комбинаторику, условия задачи, представить все возможные комбинации получения целого положительного числа N посредством сложения чисел этого же ряда.
Пример: Получить все возможные комбинации числа 8
Решение:
7+1
6+2
6+1+1
5+3
5+2+1
5+1+1+1
4+4
4+3+1
4+2+1+1
4+1+1+1+1
3+3+2
3+3+1+1
3+2+1+1+1
3+1+1+1+1+1
2+2+2+2
2+2+2+1+1
2+2+1+1+1+1
2+1+1+1+1+1+1
1+1+1+1+1+1+1+1

Решение:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
 class Program
        {
            private static List<List<int>> NumericSeries(int N)
            {
                List<List<int>> AResult = new List<List<int>>();
                
                List<int> ASeries = new List<int>();

                for(int Idx = 1; Idx < N; Idx++)
                {
                    ASeries.Add(Idx);
                }
                
                List<int> AList = new List<int>();
                int I = ASeries.Count; int Sum = 0;                
                
                do
                {
                    I -= 1;

                    while (true)
                    {
                        if (Sum + ASeries[I] <= N)
                        {
                            AList.Add(ASeries[I]);
                            Sum += ASeries[I];
                        }
                        else
                        {
                            break;
                        }
                    }

                    if (Sum == N)
                    {
                        Sum = 0; I = ASeries.IndexOf(AList[0]); AResult.Add(new List<int>(AList)); AList.Clear();
                    }

                } while (I > 0);

                return AResult;
            }

            static void Main(string[] args)
            {
                int N;

                Console.Write("Введите число:");
                if (int.TryParse(Console.ReadLine(), out N) == true)
                {
                    foreach (List<int> AList in NumericSeries(N))
                    {
                        Console.WriteLine(string.Join("+", AList.ConvertAll(new Converter<int, string>(Convert.ToString)).ToArray()));

                        for (int I = AList.Count - 1; I > 0; I--)
                        {
                            if (AList[I] > 1)
                            {
                                N = AList[I]; AList.RemoveAt(I); AList.InsertRange(I, NumericSeries(N)[0]); I = AList.Count;

                                Console.WriteLine(string.Join("+", AList.ConvertAll(new Converter<int, string>(Convert.ToString)).ToArray()));
                            }
                        }
                    }
                }
                
                Console.ReadKey();
            }
...
Рейтинг: 0 / 0
Несколько тривиальных задач из школьного курса
    #38793338
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlackStone, а можешь решить эту задачу без использования List<List<int>> ?
...
Рейтинг: 0 / 0
Несколько тривиальных задач из школьного курса
    #38793356
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonBlackStone, а можешь решить эту задачу без использования List<List<int>> ?
Рекурсия идеально подходит
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Несколько тривиальных задач из школьного курса
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]