Массивы и цикл for на C++

Михаил Попов    09.01.2016 12:31    C++ , Алгоритмы     нет комментариев

Массивы и цикл for на C++

Вчера закончил курс по C++ и получил сертификат с отличием. У меня накопилось много решений простых задач для школьников. Решил опубликовать те, которые мне понравились. Будет несколько статей по пройденному курсу. Во всех будут рассматриваться решаемые задачи. Эта статья содержит решение задач по теме "Массивы и цикл for". Оговорюсь, что рассмотренные решения выполнены исходя из полученных знаний, т.е. в них не применяются словари или множества, рассматриваемые позже.

Задача №1

Дан массив чисел. Выведите все элементы массива, которые больше предыдущего элемента.
Формат входных данных
В первой строке вводится количество элементов в массиве. Во второй строке вводятся элементы массива.
Формат выходных данных
Выведите ответ на задачу.

Sample Input:
5
1 5 2 4 3
Sample Output:
5 4
#include <iostream>
#include <vector>
using namespace std;
int main() {
    int n;
    cin >> n;
    vector <int> a;
    // считывание
    for (int i = 0; i < n; i++){
        int temp;
        cin >> temp;
        a.push_back(temp);
    }
    // обработка и вывод
    for (int i = 1; i < n; i++) {
        if (a[i] > a[i-1]) cout << a[i] << " ";
    }
    return 0;
}

Задача №2

Дан массив чисел. Если в нем есть два соседних элемента одного знака, выведите эти числа. Если соседних элементов одного знака нет - не выводите ничего. Если таких пар соседей несколько - выведите первую пару.
Формат входных данных
В первой строке вводится количество элементов в массиве. Во второй строке вводятся элементы массива. Все числа отличны от нуля.
Формат выходных данных
Выведите ответ на задачу.

Sample Input:
5
-1 2 3 -1 -2
Sample Output:
2 3
#include <iostream>
#include <vector>
using namespace std;

int main() {
    int n;
    cin >> n;
    vector <int> a;
    // считывание
    for (int i = 0; i < n; i++){
        int temp;
        cin >> temp;
        a.push_back(temp);
    }
    // обработка и вывод
    for (int i = 1; i < n; i++) {
        if (a[i] > 0 && a[i-1] > 0 || a[i] < 0 && a[i-1] < 0) {
        cout << a[i-1] << " " << a[i];
        break;
        }
    }
    return 0;
}

Задача №3

Выведите значение наименьшего нечетного элемента списка, а если в списке нет нечетных элементов - выведите число 0.
Формат входных данных
В первой строке вводится количество элементов в массиве. Во второй строке вводятся элементы массива.
Формат выходных данных
Выведите ответ на задачу.

Sample Input 1:
5
0 1 2 3 4
Sample Output 1:
1

Sample Input 2:
5
2 4 6 8 10
Sample Output 2:
0
#include <iostream>
#include <vector>
using namespace std;

int main() {
    int n, min_mod_2 = 0;
    cin >> n;
    vector <int> a;
    // считывание
    for (int i = 0; i < n; i++){
        int temp;
        cin >> temp;
        a.push_back(temp);
    }
    // обработка и вывод
    for (int i = 0; i < n; i++) {
        if ((min_mod_2 > a[i] || min_mod_2 == 0) && a[i] % 2 != 0) {
        min_mod_2 = a[i];
        }
    }
    cout << min_mod_2;
    return 0;
}

Задача №4

Дан список, упорядоченный по неубыванию элементов в нем. Определите, сколько в нем различных элементов.
Формат входных данных
В первой строке вводится количество элементов в массиве. Во второй строке вводятся элементы массива.
Формат выходных данных
Выведите ответ на задачу.

Sample Input:
6
1 2 2 3 3 3
Sample Output:
3
#include <iostream>
#include <vector>
using namespace std;

int main() {
    int n, difer = 1;
    cin >> n;
    vector <int> a;
    // считывание
    for (int i = 0; i < n; i++){
        int temp;
        cin >> temp;
        a.push_back(temp);
    }
    // обработка и вывод
    for (int i = 1; i < n; i++) {
        if (a[i-1] != a[i]) difer++;
    }
    cout << difer;
    return 0;
}

Задача №5

Переставьте соседние элементы массива (A[0] c A[1], A[2] c A[3] и т.д.). Если элементов нечетное число, то последний элемент остается на своем месте.
Формат входных данных
В первой строке вводится количество элементов в массиве. Во второй строке вводятся элементы массива.
Формат выходных данных
Выведите ответ на задачу.

Sample Input:
5
1 2 3 4 5
Sample Output:
2 1 4 3 5
#include <iostream>
#include <vector>
using namespace std;

int main() {
    int n, temp;
    cin >> n;
    vector <int> a;
    // считывание
    for (int i = 0; i < n; i++){
        cin >> temp;
        a.push_back(temp);
    }
    // обработка
    for (int i = 1; i < n; i = i + 2) {
        temp = a[i];
        a[i] = a[i-1];
        a[i-1] = temp;
    }
    // вывод
        for (auto now : a) {
        cout << now << " ";
    }
    return 0;
}

Задача №6

Циклически сдвиньте элементы списка вправо (A[0] переходит на место A[1], A[1] на место A[2], ..., последний элемент переходит на место A[0]).
Формат входных данных
В первой строке вводится количество элементов в массиве. Во второй строке вводятся элементы массива.
Формат выходных данных
Выведите ответ на задачу.

Sample Input:
5
1 2 3 4 5
Sample Output:
5 1 2 3 4
#include <iostream>
#include <vector>
using namespace std;

int main() {
    int n, last, temp;
    cin >> n;
    vector <int> a;
    // считывание
    for (int i = 0; i < n; i++){
        cin >> temp;
        a.push_back(temp);
    }
    // обработка
    last = a[n-1];
    for (int i = n-1; i > 0; i--) {
        temp = a[i-1];
        a[i-1] = a[i];
        a[i] = temp;
    }
    a[0] = last;
    // вывод
    for (auto now : a) {
        cout << now << " ";
    }
    return 0;
}

Задача №7

Дан массив чисел. Посчитайте, сколько в нем пар элементов, равных друг другу. Считается, что любые два элемента, равные друг другу образуют одну пару, которую необходимо посчитать.
Формат входных данных
В первой строке вводится количество элементов в массиве. Во второй строке вводятся элементы массива.
Формат выходных данных
Выведите ответ на задачу.

Sample Input 1:
5
1 2 3 2 3
Sample Output 1:
2

Sample Input 2:
5
1 1 1 1 1
Sample Output 2:
10
#include <iostream>
#include <vector>
using namespace std;

int main() {
    int n, temp, sum = 0;
    cin >> n;
    vector <int> a;
    vector <int> counts;
    vector <int> val;
    // считывание
    for (int i = 0; i < n; i++){
        cin >> temp;
        a.push_back(temp);
    }
    // обработка
    val.push_back(a[0]);
    counts.push_back(1);
    for (int i = 1; i < n; i++) {
        bool added = false;
        for (int j = 0; j < val.size(); j++) {
            if (val[j] == a[i]) {
                counts[j]++;
                added = true;
                }
        }
        if (not added) {
            val.push_back(a[i]);
            counts.push_back(1);
        }
    }
    // вывод
    for (auto now : counts) {
        if (now > 1) {
            sum = sum + (now * now - 3 * now) / 2 + now;
        }
    }
    cout << sum;
    return 0;
}

Задача №8

Дан массив. Выведите те его элементы, которые встречаются в массиве только один раз. Элементы нужно выводить в том порядке, в котором они встречаются в списке.
Формат входных данных
В первой строке вводится количество элементов в массиве. Во второй строке вводятся элементы массива.
Формат выходных данных
Выведите ответ на задачу.

Sample Input 1:
6
1 2 2 3 3 3
Sample Output 1:
1

Sample Input 2:
8
4 3 5 2 5 1 3 5
Sample Output 2:
4 2 1
#include <iostream>
#include <vector>
using namespace std;

int main() {
    int n, temp, sum = 0;
    cin >> n;
    vector <int> a;
    vector <int> counts;
    vector <int> val;
    // считывание
    for (int i = 0; i < n; i++){
        cin >> temp;
        a.push_back(temp);
    }
    // обработка
    val.push_back(a[0]);
    counts.push_back(1);

    for (int i = 1; i < n; i++) {
        bool added = false;
        for (int j = 0; j < val.size(); j++) {
            if (val[j] == a[i]) {
                counts[j]++;
                added = true;
            }
        }
        if (not added) {
            val.push_back(a[i]);
            counts.push_back(1);
        }
    }
    // вывод
    for (int j = 0; j < counts.size(); j++) {
        if (counts[j] == 1) {
            cout << val[j] << " ";
        }
    }
    return 0;
}

Задача №9

Известно, что на доске 8×8 можно расставить 8 ферзей так, чтобы они не били друг друга. Вам дана расстановка 8 ферзей на доске, определите, есть ли среди них пара бьющих друг друга.
Формат входных данных
Программа получает на вход восемь пар чисел, каждое число от 1 до 8 - координаты 8 ферзей.
Формат выходных данных
Если ферзи не бьют друг друга, выведите слово NO, иначе выведите YES.

Sample Input 1:
1 7
2 4
3 2
4 8
5 6
6 1
7 3
8 5
Sample Output 1:
NO

Sample Input 2:
1 8
2 7
3 6
4 5
5 4
6 3
7 2
8 1
Sample Output 2:
YES
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;

int main() {
    int temp;
    bool cross = false;
    vector <int> x, y;
    // считывание
    for (int i = 1; i <= 8; i++) {
        cin >> temp;
        x.push_back(temp);
        cin >> temp;
        y.push_back(temp);
    }
    // обработка
    for (int i = 0; i < x.size() - 1; i++) {
        for (int j = i + 1; j < x.size(); j++) {
            if (abs(x[i] - x[j]) == abs(y[i] - y[j]) || x[i] == x[j] || y[i] == y[j]) {
                cross = true;
            }
        }
    }
    if (cross) cout << "YES";
    else cout << "NO";
    return 0;
}

Работа с действительными числами на C++ Изучаем цикл while на C++

0     0

blog comments powered by Disqus