Задача про шарики. Процедурное программирование, 1 семестр

Помогите пожалуйста с задачкой про шарики. Может у кого-то сохранилось решение… Буду благодарен
Сюжет задачи про шарики. Из урны с 10 пронумерованными шариками вынимают по одному шарику. Подсчитать общее количество ситуаций, когда номер хотя бы одного вынутого шарика совпадает с порядковым номером действия “вынимания”, например, когда шарик № 3 будет вынут 3-им по порядку.

Один из возможных вариантов алгоритма решения задачи про шарики

  1. Задать количество шариков n.

  2. Создать массив пронумерованных шариков от 1 до n.

  3. Целочисленная переменная i - номер шарика (от 1 до n), одновременно являющаяся счетчиком действий.

  4. Создать функцию perestanovka от целочисленных m и n, которая генерирует перестановки, в зависимости от количества шариков (n) и в которой фигурирует номер очередного переставляемого шарика (m). В этой функции использовать условие: когда номер шага i равен номеру вынимаемого шарика m, печатать очередную перестановку. Во всех остальных случаях менять местами элементы с номерами i и m, после чего вызывать функцию perestanovka со следующим значением шага и опять же менять местами элементы с номерами i и m.

  5. Основная программа: присваивание шарикам порядковых номеров, вызов функции perestanovka с параметрами 1 (первый шаг) и n (количество шариков).

1 Like
#include <iostream>
#include <algorithm>
using namespace std;
bool perestanovka(int* urna, int n) 
{
    for (int i = 0; i < n; ++i)
    {
        if (urna[i] == i)
        {
            return true;
        }
    }
    return false;
}

int main() 
{
    int ans = 0,n=10, fac = 3628800;
    int urna[10] = { 0,1,2,3,4,5,6,7,8,9 };
    for (int i = 0; i < fac; ++i) 
    {
        next_permutation(urna, urna + n);
        if (perestanovka(urna,n))
            ans++;
    }
    cout << ans << endl;

    return 0;
}

(сори, не могу файл прикрепить пока что. Надеюсь, то)

3 Likes

Бро, если ты такое не можешь решить, да даже погуглить можно и найти, ты как вообще учиться/работать в будущем собрался? :upside_down_face:
Для этой задачки даже алгоритм дают!
Я теперь понимаю, чего преподователи ноют, что каждый год перваки всё хуже и хуже