Задачи для самостоятельного решения. Массивы и строки

Предлагаю для самопроверки решить несколько простых задач, обычно предлагаемых студентам-первокурсникам, которые только начинают изучать программирование. Задачи повышенного уровня сложности решайте после проработки примеров решения задач по теме «Массивы». Некоторые из них уже решаются новичками, см. раздел также Примеры решения задач начинающими программистами — соавторами сайта с комментариями.

Простые задачи

Задача 1. Введите с клавиатуры строку произвольной длины и подсчитайте процент вхождения заданного символа в строку.

Задача 2. Задан массив действительных чисел размерности 10х10. Найти суммы элементов каждой строки, произведения элементов каждого столбца, и максимальный элемент главной диагонали (подсказка: все элементы, для которых номер строки совпадает с номером столбца).

Задача 3. В заданной строке текста определите количество слов. Каждое слово отделено друг от друга пробелом.

Задача 4. Задан одномерный массив целых чисел. Образуйте из него два отсортированных по возрастанию массива, содержащих четные и нечетные числа. Подсказка: четное число делится на 2 без остатка. Есть пример развернутого решения задачи.

Задача 5. В заданном массиве действительных чисел найдите разность между максимальным и минимальным числом.

Задача 6. В одномерном массиве из 100 чисел M[] подсчитайте количество элементов, удовлетворяющих условию 0 < M[i] <125.

Задача 7. Определите, является ли исходная строка символов палиндромом (читается одинаково с начала и с конца). Регистры символов и пробелы игнорируйте.

Задача 8. Задана квадратная матрица целых чисел. Подсчитайте количество отрицательных и положительных элементов, а также выведите на печать координаты нулевых элементов (номер строки и номер столбца).

Задача 9. Введите с клавиатуры строку произвольной длины и подсчитайте процент вхождения гласных букв латинского алфавита в строку (не различая регистры).

Задача 10. Задан массив действительных чисел из N элементов (используйте генератор случайных чисел). Определить количество элементов, значения которых находятся в диапазоне от -100 до +100.

Задача 11. Задано пять произвольных целых чисел (элементы массива). Определить, является ли их расположение в массиве упорядоченным (т.е. по возрастанию или по убыванию) или неупорядоченным.

Задача 12. Задан массив действительных чисел из N элементов (используйте генератор случайных чисел). Определить количество элементов, значения которых находятся вне диапазона от -10 до +10.

Задача 13. В двухмерном массиве переставьте попарно соседние строки, т.е. 1-ю со 2-ой, 3-ю с 4-й и т.д. Результат выведите на экран.

Задача 14. Определите, присутствует ли в тексте, заданном в виде строки, некоторое слово (различие регистра игнорируйте).

Задача 15. Задан генератором случайных чисел одномерный массив из действительных чисел. Найдите максимальное и минимальное число этого массива.

Задача 16. Напишите методы для ввода одномерного массива с клавиатуры и для вывода его содержимого на экран.

Задача 17. В массиве строк (список фамилий) определите самую длинную фамилию.

Задача 18. Найдите сумму и произведение элементов квадратной матрицы размерности 10х10.

Задача 19. Задано три треугольника со своими сторонами (a, b, c). Найти треугольник с наибольшим периметром или наибольшей площадью. Всегда ли это будет один и тот же треугольник?

Задача 20. Сформируйте массив целых чисел по алгоритму Фибоначчи: 1-й и 2-й элемент равны 1, а каждый последующий равен сумме двух предыдущих, т.е.: 1, 1, 2, 3, 5, 8, … . Найдите сумму и произведение его N членов.

Задача 21. Задан двумерный массив чисел (используйте генератор случайных чисел). Отсортируйте каждую нечетную строку по возрастанию, а каждую четную – по убыванию, после чего выведите значение k-го столбца.

Задача 22. Сформируйте одномерный массив действительных чисел как геометрическую последовательность со знаменателем ½, начиная с 1, т.е.: 1,0 0,5 0,25 0,125 и т.д. Чему будет равна сумма 100 его членов с точностью до 10-10?

Задача 23. Дано: информация о студенте вуза содержит следующие элементы:
а) фамилия, имя;
б) шифр группы;
в) массив оценок по каждой дисциплине за семестр (от 2 до 5).
Информация о студенте является элементом массива М[ ].
Требуется определить фамилии студентов, которые будут включены в приказ на отчисление по результатам сессии (условие – по трем или более дисциплинам каждая оценка — двойка).

Задача 24. Известны (вводятся с клавиатуры) размеры 10 треугольников (задаются три стороны). Напишите функцию, вычисляющую площадь треугольника по формуле Герона и с ее помощью определите номер треугольника с наибольшей площадью.

Задача 25. Вычислите сумму членов последовательности, начинающейся с единицы, в которой каждый следующий член в три раза больше предыдущего, т.е. {1, 3, 9, 27, 81,…}, причем последний член последовательности не должен превышать 1000.

Задача 26. Задан массив целых чисел A[20]. Создать другой массив целых чисел B[ ], в который войдут все числа исходного массива, удовлетворяющие условию: А[i] <= 888, после чего отсортировать элементы массива В[ ] по убыванию.

Задача 27. Введите с клавиатуры строку произвольной длины, расположите символы в строке в порядке возрастания их кода и образуйте новую строку, в которой символы будут расположены в обратном порядке относительно отсортированной строки.

Задача 28. Дано: информация о каждом жителе города содержит следующие элементы:
а) фамилия, имя, отчество;
б) домашний адрес (улица, дом);
в) дата рождения.
Информация о жителе является элементом одного большого массива М[ ].
Требуется составить списки избирателей, живущих по заданному адресу в алфавитном порядке.
Примечание: Правом участия в выборах обладают люди не моложе 18 лет.

Задача 29. Составьте процедуры, которые бы вычисляли сумму и произведение двух матриц (не обязательно квадратных) с проверкой размерностей.

Задача 30. Дано: информация о студенте вуза содержит следующие элементы:
а) фамилия, имя;
б) шифр группы;
в) массив оценок по каждой дисциплине за семестр (от 2 до 5).
Информация о студенте является элементом массива М[ ].
Требуется определить фамилии студентов, которые будут включены в приказ на стипендию по результатам сессии (условие – оценки по всем дисциплинам не ниже четверки).

Задача 31. Вычислите сумму членов последовательности, в которой каждый следующий член в три раза меньше предыдущего, начиная с единицы, т.е.:
S=1+1/3+1/9+1/27+…
с погрешностью 10-3.

Задача 32. Отсортируйте введенный список фамилий по алфавиту и выведите его на экран.

Задача 33. Напишите функцию, вычисляющую экспоненту через ряд с заданной точностью 10-15, сравните результат с константой System.Math.E.

Задачи повышенного уровня сложности

Восемь ферзей 2

Постановка задачи. Можно ли поставить на пустой шахматной доске восемь ферзей так, чтобы ни один из них не «атаковал» другого, т.е. никакие два ферзя не стояли бы на одном и том же столбце или на одной и той же строке или на одной и той же диагонали? Определите максимально возможное число расстановок 8 ферзей в соответствии с указанными правилами. Дополните задачу некоторыми условиями, например, чтобы ферзей нельзя было ставить на главные диагонали, или чтобы первый ферзь был поставлен на строго определенную клетку шахматной доски (например, а2). Придумайте алгоритм, не использующий полный перебор, как в примере решения задачи «Восемь ферзей».

Решето Эратосфена

Простое число – это любое целое число, которое точно делится без остатка только само на себя и 1. Решето Эратосфена работает следующим образом:
1) Создайте массив, все элементы которого имеют начальное значение 1 (истина). Элементы массива с простыми индексами останутся равными 1. Все другие элементы массива, в конечном счете, установятся равными нулю.
2) Начиная с индекса массива 2 (индекс 1 должен быть простым) каждый раз отыскивается элемент массива с единичным значением, циклически обрабатывается оставшаяся часть массива и устанавливается в нуль каждый элемент массива, чей индекс кратен индексу элемента с единичным значением. Для индекса 2 все элементы в массиве с большим чем 2 индексом и кратные 2 установятся равными нулю (индексы 4, 6, 8, …); для индекса 3 все элементы с индексом свыше 3 и кратные 3, установятся равными нулю (индексы 6, 9, 12, …) и т.д.
3) Когда процесс закончится, элементы массива с единичным значением указывают, что их индексы – простые числа. Эти индексы могут быть напечатаны.

Напишите программу, которая использует массив из 100 млн элементов для определения и печати простых чисел между N_min и N_max. Элемент 0 массива во внимание не принимайте.

Сравните эффективность алгоритма с алгоритмом решения задачи «Простые числа». Критерий эффективности – время решения задачи.

Путешествие коня

Математик Л. Эйлер предложил головоломку:

Может ли шахматная фигура «конь» обойти все 64 клетки шахматной доски, побывав на каждой из них только один раз? Конь ходит L-образно (на две клетки в каком-либо направлении и затем на одну клетку в перпендикулярном направлении).

Таким образом, из клетки в середине пустой доски конь может сделать восемь различных ходов (пронумеруем их от 0 до 7). На листе бумаги 8х8 попытайтесь выполнить путешествие коня вручную. Пометьте цифрой 1 первую клетку, куда вы поставите коня, цифрой 2 — вторую, цифрой 3 – третью и т.д.

Разработайте программу путешествия коня на шахматной доске. Введите счетчик, который изменяется от 1 до 64. Записывайте в массив номер последней клетки, на которую передвинулся конь. Помните, что для контроля каждого возможного хода нужно видеть, был ли уже конь на этой клетке и, конечно же, проверять, не выйдет ли конь за пределы шахматной доски.

Запустите программу. Сколько ходов сделал ваш конь?

Измените программу, используя опыт игры «в ручную», либо генератор случайных чисел (при выборе хода).

9 комментариев к “Задачи для самостоятельного решения. Массивы и строки”

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

    Вопрос от Ивана https://c-sharp.pro/?p=1797#comment-1206, как решить?
    Задача 2. Задан массив действительных чисел размерности 10х10. Найти суммы элементов каждой строки, произведения элементов каждого столбца, и максимальный элемент главной диагонали (подсказка: все элементы, для которых номер строки совпадает с номером столбца).
    ОТВЕТ:
    1) Введите массив A[10,10]
    2) В цикле по строкам найдите суммы элементов каждой строки, выведите на печать
    3) В цикле по столбцам найдите произведения элементов каждого столбца, выведите на печать
    4) В цикле найдите максимальный элемент среди A[i,i], где i=0,1,…,9, выведите его на печать.
    И все.

    1. Александр

      Вот, как вариант:

      while (true)
      {
         Console.Clear();
         int[,] myArray = new int[3, 3];
         Random random = new Random();
         for (int i = 0; i < myArray.GetLength(0); i++)
            for (int j = 0; j < myArray.GetLength(1); j++)
               myArray[i, j] = random.Next(100);
         for (int y = 0; y < myArray.GetLength(0); y++)
         {
            for (int x = 0; x < myArray.GetLength(1); x++)
               Console.Write(myArray[y, x] + "\t");
            Console.WriteLine();
         }
         Console.WriteLine("Введите номер строки для расчета суммы элементов: ");
         int N = Int32.Parse(Console.ReadLine()) - 1;
         int sum = 0;
         for (int i = 0; i < myArray.GetLength(1); i++)
            sum += myArray[N, i];
         Console.WriteLine("Сумма элементов= " + sum);
         //сумма элементов каждой строки
         for (int y = 0; y < myArray.GetLength(0); y++)
         {
            sum = 0;
            for (int x = 0; x < myArray.GetLength(1); x++)
            sum += myArray[y, x];
            Console.WriteLine("Сумма элементов в " + (y + 1) + " ряде = " + sum);
         }
         Console.WriteLine();
         //произведение элементов каждого столбца
         for (int x = 0; x < myArray.GetLength(1); x++)
         {
            int proizv = 1;
            for (int y = 0; y < myArray.GetLength(0); y++)
            proizv *= myArray[y, x];
            Console.WriteLine("Произведение элементов в " + (x + 1) + " столбце = " + proizv);
         }
         Console.WriteLine();
         //максимальный элемент главной диагонали
         int max = myArray[0, 0];
         for (int i = 0; i < myArray.GetLength(0); i++)
         {
            for (int j = 0; j < myArray.GetLength(1); j++)
            {
               if (i == j)
               {
                  if (max < myArray[i, j])
                  {
                     max = myArray[i, j];
                  }
               }
            }
         }
         Console.WriteLine("Максимальный элемент в главной диагонали = " + max);
         Console.ReadKey();
      }
      1. Вячеслав Рычков

        Александр! Задача решена.
        Поиск максимального элемента короче писать так:

        int max = myArray[0, 0];
        for (int i = 0; i < myArray.GetLength(0); i++)
            if (max < myArray[i, i])
               max = myArray[i, i];
  2. Задача 6. В одномерном массиве из 100 чисел M[] подсчитайте количество элементов, удовлетворяющих условию 0 < M[i] <125.
    Моё решение:

    Random rnd = new Random();
    int[] M = new int[100];
    int count = 0;
    for (int i = 0; i < 100; i++)
    {
       M[i] = rnd.Next(-100, 200);
       if (M[i]>0 && M[i]<125)
          count++;
    }
    Console.WriteLine(count);
  3. Задача 10. Задан массив действительных чисел из N элементов (используйте генератор случайных чисел). Определить количество элементов, значения которых находятся в диапазоне от -100 до +100.
    Решение:

    Random rnd = new Random();
    int[] Array = new int[rnd.Next(1, 10)];
    int count = 0;
    for (int i = 0; i = -100 && Array[i] <= 100)
    {
       count++;
    }
    Console.WriteLine(count);
    1. Вячеслав Рычков

      Нурс! Две ошибки: синтаксическая — заголовок цикла for и семантическая (смысловая) — Вы не задаете элементы массива, а только их количество (от 1 до 9). Смотрите мои замечания к задаче 6. Тестируйте программу лучше.

  4. Александр

    Задача 1. Введите с клавиатуры строку произвольной длины и подсчитайте процент вхождения заданного символа в строку.
    Решение:

    static void Main(string[] args)
    {
       string vhod;
       Console.Write("Введите строку: ");
       vhod = Console.ReadLine();
       char[] myArray = vhod.ToCharArray(); // вставить символы строки в массив
       Console.Write("Введите искомый символ: ");
       char x = char.Parse(Console.ReadLine());
       int count = 0;
       for (int i = 0; i < myArray.Length; i++)   // поиск искомого символа в массиве
          if (myArray[i] == x) count++;
             int result = (100 * count) / vhod.Length;
       Console.WriteLine("Процент совпадения искомого символа = " +result + "%");
    }
    1. Вячеслав Рычков

      Александр! Работает. А если строку объявить не через массив, а как string? Справитесь?

Оставьте комментарий

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

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