Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Среди всех четырехзначных цифр определить число тех, у которых все цифры различны - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Известно данные о 16 работников фирмы http://www.cyberforum.ru/cpp-beginners/thread974120.html
1)Известно данные о 16 работников фирмы: фамилии и семейное положение (женат или нет). Распечатать фамилии всех женатых работников. 2)Написать программу, процедуру, которая удаляет из списка N-ый...
C++ Хеш таблица с функцией (метод цепочек) 1) Не смотрите на хеш функцию, она наитупейшая, я еще над ней не работал. 2)Метод цепочек заключается в том, если в ячейке массива есть уже элемент, то создается список и туда уже записывается новые... http://www.cyberforum.ru/cpp-beginners/thread974114.html
C++ Найти на главной диагонали квадратной матрицы максимальный и минимальный элементы
Найти на главной диагонали квадратной матрицы максимальный и минимальный элементы. Поменять местами строки, в которых они расположены. Напишите как поменять местами строки)
C++ Не получается перевести в двоичную систему
Требуется перевести в двоичную систему счисления, но потом некоторые переменные меняют своё значение. У меня CodeBlocks. #include <iostream> #include <locale.h> #include <math.h> using...
C++ Указатели и массивы. Передача массива в функцию по указателю http://www.cyberforum.ru/cpp-beginners/thread974093.html
Как передать массив в функцию,которая должна заполнить этот массив ? Вот,что я составил, но компилятор ругается: #include "stdafx.h" #include <iostream> #include <cstdlib> #include <ctime> ...
C++ Забыл название операции Как называется считывание текстовых строк типа (слово_2) "слово_3" , где , например, означают "не обязательно для заполнения" и т.д. Что-то типа ввода команд в консоли получается. Из головы вылетело... подробнее

Показать сообщение отдельно
MrGluck
Модератор
Эксперт CЭксперт С++
7423 / 4538 / 673
Регистрация: 29.11.2010
Сообщений: 12,319
11.10.2013, 03:21
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
69
#include <iostream>
#include <algorithm>
 
// последняя комбинация служит стоп-сигналом, поэтому считаем с 1
// M - система счисления, N - число цифр, val - массив цифр числа
bool stop(const int N, const int* val, const int M)
{
    for (int i=0; i < M; i++)
        if (val[i] != N - 1 - i)
            return false;
    return true;
}
 
// функция возвращает истину если все цифры в числе разные
bool unique(const int* val, const int sz)
{
    // копируем наше число во временное
    int* tmp = new int[sz];
    for (int i=0; i < sz; i++)
        tmp[i] = val[i];
    // сортируем цифры временного числа
    std::sort(tmp, tmp + sz);
    bool onlyUniqueDigits = (std::unique(tmp, tmp + sz) == tmp + sz);
    delete[] tmp;
 
    return onlyUniqueDigits;
}
 
// M - система счисления, N - число цифр, val - массив цифр числа
void increment(const int M, int* val, const int N)
{
    val[N-1]++;
    for (int i = N-1; i > 0; i--)
        if (val[i] == M)
        {
            val[i - 1]++;
            val[i] -= M;
        }
}
 
void print(const int* arr, const int sz)
{
    for (int i=0; i < sz; i++)
        std::cout << arr[i];
    std::cout << std::endl;
}
 
 
int main()
{
    const int N = 10, M = 3;
    int val[M], counter = 1;
 
    // формируем начальное число
    for (int i=0; i < M; i++)
        val[i] = i;
    std::swap(val[0], val[1]); // меняем первые две цифры
 
    // пока не достигли последней комбинации
    while (!stop(N, val, M))
    {
        // если число уникально
        if (unique(val, M))
            counter++;
            //print(val, M);
        increment(N, val, M);
    }
    std::cout << "Counter: " << counter << std::endl;
}
без проверок на входные данные
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru