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

Цифры числа - C++

Войти
Регистрация
Восстановить пароль
 
yuik
0 / 0 / 0
Регистрация: 27.11.2009
Сообщений: 11
27.11.2009, 22:49     Цифры числа #1
Есть задачка:

ВВести натуральное число, сохранить все его цифры:
А) В отсортированном массиве, массив распечатать
б) Построить список частот цифр в числе, список распечатать
В) Найти максимальное число, которое можно построить из цифр числа

Помогите, будьте добры=)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.11.2009, 22:49     Цифры числа
Посмотрите здесь:

В десятичной записи числа 42*4* пропущены 2 цифры. Определите эти цифры, если известно, что число кратно 72. C++
Переставить первую и последнюю цифры числа натурального числа n C++
Для натурального числа определить истинность предиката «все цифры в записи числа равны» C++
Найти двузначные числа, у которых сумма удвоенного квадрата первой цифры и квадрата второй цифры равен самому числу C++
C++ Замена последней цифры на значение наименьшей цифры в записи числа N
Исключить из числа цифры, стоящие между первой и последней цифрой числа. Использовать классы C++
C++ Получить число М, которое образуется из числа N путем замены последней цифры на значение наибольшей цифры
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Акелла
Сонный металюга
 Аватар для Акелла
45 / 45 / 6
Регистрация: 10.05.2009
Сообщений: 295
27.11.2009, 23:12     Цифры числа #2
т.е. ты число вводишь как строчку?

1. создаем 2 массива- символьный и целочисленный - в первый при помощи gets читаешь число как строку, а во второй при помощи atoi из первого берешь символы чисел и преобразуешь в числа
2. массив сортируем и выводим - вуаля

3. массив у тебя уже есть - даже отсортирован - считаешь сколько раз каждое число встречается - тут ну можешь например создать еще один массив куда будешь для каждого числа записывать частоту - числа все равно по порядку идут у тебя уже

а с последним - делаешь всевозможные перестановки и смотришь - каждый раз запоминаешь число если оно больше предыдущего. для этого например можно снова преобразовать его в строку и сравнивать strcmp
fasked
Эксперт C++
 Аватар для fasked
4925 / 2505 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
27.11.2009, 23:20     Цифры числа #3
есть подозрение, что наибольшее число построенное и цифр числа и будет отсортированный массив цифр числа О__о
так что всевозможные перестановки делать не надо
Акелла
Сонный металюга
 Аватар для Акелла
45 / 45 / 6
Регистрация: 10.05.2009
Сообщений: 295
27.11.2009, 23:21     Цифры числа #4
кстати да - если отсортировать по убыванию=)
Андрейка
419 / 223 / 27
Регистрация: 25.03.2009
Сообщений: 744
27.11.2009, 23:35     Цифры числа #5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <vector>
#include <iterator>
#include <algorithm>
#include <functional>
int main()
{
    std::vector<int>vec;
    std::copy(std::istream_iterator<int>(std::cin),std::istream_iterator<int>(),std::inserter(vec,vec.begin()));
    std::copy(vec.begin(),vec.end(),std::ostream_iterator<int>(std::cout," "));
    std::cout<<std::endl<<"max chislo:";
    std::sort(vec.begin(),vec.end(),std::greater<int>());
    std::copy(vec.begin(),vec.end(),std::ostream_iterator<int>(std::cout," "));
    return 0;
}
yuik
0 / 0 / 0
Регистрация: 27.11.2009
Сообщений: 11
27.11.2009, 23:37  [ТС]     Цифры числа #6
Андрейка:
не понял ни строки из этого кода, библиотеки, используемые вами, мы не проходили....не примут это=(
Андрейка
419 / 223 / 27
Регистрация: 25.03.2009
Сообщений: 744
27.11.2009, 23:39     Цифры числа #7
yuik, жалко.
yuik
0 / 0 / 0
Регистрация: 27.11.2009
Сообщений: 11
27.11.2009, 23:40  [ТС]     Цифры числа #8
Акелла, спс за идею....ща попробую реализовать
Акелла
Сонный металюга
 Аватар для Акелла
45 / 45 / 6
Регистрация: 10.05.2009
Сообщений: 295
27.11.2009, 23:42     Цифры числа #9
Андрей тебе просто на чисто с++ фишках все расписал
Андрейка
419 / 223 / 27
Регистрация: 25.03.2009
Сообщений: 744
27.11.2009, 23:46     Цифры числа #10
Акелла, ну да ) тут по сути на каждое действие алгоритма одна строчка кода
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.11.2009, 11:48     Цифры числа
Еще ссылки по теме:

Вывести сумму первой и третьей цифры и произведение второй и четвертой цифры числа, заданного пользователем C++
C++ Для введённого с клавиатуры 6-значного числа определить, являются ли все цифры числа нечетные
C++ Циклы: найти произведение последней цифры и минимальной цифры числа с произведением всех остальных
Получить из трехзначного числа четырехзначное подстановкой в начало числа цифры его единиц C++
Образовать новое число, путём замены последней цифры на значение наименьшей цифры в записи исходного числа C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
fasked
Эксперт C++
 Аватар для fasked
4925 / 2505 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
29.11.2009, 11:48     Цифры числа #11
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
#include <iostream>
 
using std::cin;
using std::cout;
 
#define BASE 10;
 
int length(int a)
{
    int len = 1;
    int temp = BASE;
 
    while(a > temp)
    {
        temp *= BASE;
        len++;
    }
 
    return len;
}
 
int low(int a, int nlow)
{
    int temp = BASE;
    while(--nlow)
    {
        temp *= BASE;
    }
    return a%temp;
}
 
void into(int *in, int n, const int len)
{
    for(int i = (len - 1); i >= 0; i--)
    {
        in[i] = low(n, 1);
        n /= BASE;
    }
}
 
void print(const int *out, const int len)
{
    for(int i = 0; i < len; i++)
    {
        cout << out[i];
    }
    cout << "\n";
}
 
/* сортировка. метод пузырька */
void sort(int *a, int size)
{
    int x = 0;
    for(int i = 0; i < size; i++)               // i - номер прохода
    {               
        for(int j = size-1; j > i; j-- )        // внутренний цикл прохода
        {
            if ( a[j-1] < a[j] )
            {
                x = a[j-1];
                a[j-1] = a[j];
                a[j] = x;
            }
        }
    }
}
 
void herz(const int *a, int size)
{
    int cipher = BASE;
    int *b = new int[cipher];
    int amount = 0;
 
    for(int i = 0; i < cipher; i++)
    {
        amount = 0;
        for(int j = 0; j < size; j++)
        {
            if( a[j] == i )
            {
                amount++;
            }
        }
        b[i] = amount;
    }
 
    print(b, cipher);
 
    delete b;
}
 
void yuik()
{
    /* объявлеие переменных */
    int n = 0;
    int nlen = 1;           // длины чисел
    int t = 0;              // временная переменная (всегда пригодится)
    int tn = 0;             // и еще одна тоже не помешает
    
    /* запрос числа от пользователя */
    cout << "Введите число 'n' (не большее, чем int): ";
    cin >> n;
 
    /* некоторые присваивания */
    tn = n;                 // чтобы не потерять исходное число, будем работать с tn
    int len = length(n);    // посчитать длину числа n (количество разрядоц/цифр)
    int *in = new int[len]; // создать массив подходящего размера
 
    into(in, n, len);       // записать число в массив in
    cout << "Число в представлении массива (правильно ли записалось?)\n";
    print(in, len);         // вывести массив на экран
    cout << "Отсортировать массив по убыванию (это и будет максимальное число ;)\n";
    sort(in, len);          // отсортировать массив
    print(in, len);         // вывести массив на экран
    cout << "Встречаемость цифр в числе (слева направо от 0 к 9)\n";
    herz(in, len);          // определить и вывести частоту цифр в числе
 
    delete in;
 
    cout << "\n";
}
 
int main(int argc, char **argv)
{
    setlocale(LC_ALL, "Russian");
    //xex(); // вычисление суммы k-млдаших разрядов числа n и k-старших разрядов числа m
    //dimiona(); // оператор switch, какой текущий месяц, если прошло n месяцев
    //yuik();
 
    yuik();
 
    system("pause");
    return 0;
}
Вот, делает все шаги, кроме максимального числа, потому что это тоже самое что сортировка.

Добавлено через 6 минут
сторонними юзал только cin и cout .. в случае надобности сам легко заменишь их на аналоги
Yandex
Объявления
29.11.2009, 11:48     Цифры числа
Ответ Создать тему
Опции темы

Текущее время: 11:17. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru