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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
A1exSun
C#
55 / 55 / 1
Регистрация: 09.03.2013
Сообщений: 214
#1

Найти количество цифр, которые входят в каждое из 3 чисел - C++

12.04.2013, 13:39. Просмотров 350. Ответов 7
Метки нет (Все метки)

Даны три натуральных числа А, В, С. Найдите количество цифр, входящих одновременно в состав каждого из для этих чисел.
Входные данные: 3 числа, каждое в своей строке, не больше 1000000.
Выходные данные: единственное число - искомая величина.

Например, на входе:
234087
408209
1804
На выходе:
3
(числа 2, 0 и 8)

Как решить эту задачу, чтоб уложиться в 1 секунду времени выполнения?

Мне приходит идея только принимать 3 строки, находить из них самую длинную, потом в цикле с помощью strrchr() искать каждую цифру самой длинной строки в остальных двух, найденные цифры записывать в массив, потом из этого массива в новый копировать уникальные цифры, потом вывести длину нового массива.
Но как-то это все через ж
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.04.2013, 13:39
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Найти количество цифр, которые входят в каждое из 3 чисел (C++):

Дана последовательность n натуральных чисел. Для каждого числа вычислить количество его цифр и сумму этих цифр. Вывести на экран каждое число, количес - C++
Дана последовательность n натуральных чисел. Для каждого числа вычислить количество его цифр и сумму этих цифр. Вывести на экран каждое...

Найти произведение четных чисел, которые входят в интервал (10..20) и (30..40) - C++
Операторы цикла: Найти произведение четных чисел, которые не входят в интервал (10..20) и (30..40) (задание должно быть выполнено всеми...

Найти произведение четных чисел, которые не входят в интервал - C++
Операторы цикла: Найти произведение четных чисел, которые не входят в интервал (10..20) и (30..40) (задание должно быть выполнено всеми...

В одномерном массиве найти среднее арифметическое чисел, которые входят в диапазон от 5 до 10 - C++
помогите написать программу)))дан одномерный массив некоторых чисел найти среднее арифметическое чисел которые входят в диапазон от 5 до...

Напечатать в алфавитном порядке все звонкие буквы которые входят в каждое слово - C++
(СИ)дана непустая последовательность слов из строчных русских букв, между соседними словами- запятая, за последним словом- точка.Напечатать...

Найти наименьшее среди тех чисел в первой последовательности, которые не входят во вторую - C++
1. Даны 2 последовательности по 5 чисел в каждой.Найти наименьшее среди тех чисел в первой последовательности, которые не входят во вторую ...

7
w8me
496 / 11 / 1
Регистрация: 10.04.2013
Сообщений: 44
12.04.2013, 15:06 #2
Переводить в массив можно так:
C++
1
2
3
4
5
6
7
8
9
10
11
    
        int a1;
    scanf("%d",&a1);
    char w[15];
    int c1=0;
    while (a1>0)
    {
        w[c1]=a1%10;
        a1/=10;
        c1++;
    }
0
A1exSun
C#
55 / 55 / 1
Регистрация: 09.03.2013
Сообщений: 214
12.04.2013, 15:11  [ТС] #3
Да это я в курсе... Можно и не переводить, а сразу прочесть 3 строки, вместо 3 чисел. Написал же.
1
co6ak
Кошковед
409 / 502 / 29
Регистрация: 12.04.2010
Сообщений: 1,392
12.04.2013, 15:42 #4
если хочешь без строк - там логи еще проще. в цикле (или в ф-ии) деление + остаток от деления на 10 дадут тебе цифры числа
0
Olivеr
412 / 408 / 13
Регистрация: 06.10.2011
Сообщений: 832
12.04.2013, 15:51 #5
писал на скорую руку, но думаю идея понятна
дальше крути как хочешь, с количеством и тп
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
#include <iostream>
#include <algorithm>
 
using namespace std;
 
int main()
{
    //int arr[3] = {408209, 234087, 1804};
    int arr[3] = {667, 434746, 627364};
    sort(arr, arr + 3);
    reverse(arr, arr + 3); //последовательность должна быть отсортирована по убыванию
 
    while (arr[0])
    {
        int currVal = arr[0] % 10; //текущее проверяемое значение (цифра)
        bool isUniq1(true); //флаг присутствия цифры во втором числе
        bool isUniq2(true);
 
        int t = arr[1];
 
        while (t) {
 
            if ((t % 10) == currVal) {
                isUniq1 = false;
                break;
            }
            t/=10;
        }
 
        t = arr[2];
 
        while (t) {
 
            if ((t % 10) == currVal) {
                isUniq2 = false;
                break;
            }
            t/=10;
        }
 
        if (!isUniq1 && !isUniq2)
            cout << currVal << endl;
 
        arr[0]/=10;
    }
 
    return 0;
}
1
A1exSun
C#
55 / 55 / 1
Регистрация: 09.03.2013
Сообщений: 214
13.04.2013, 15:11  [ТС] #6
Мое решение:
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
#include <iostream>
#include <algorithm>
#include <string.h>
 
using namespace std;
 
int main(void)
{
    char n1[8], n2[8], n3[8], p[8] = "\0";
    cin>>n1>>n2>>n3;
    int i, j = 0;
    for (i = 0; i < strlen(n1); i++)
        if (strchr(n2, n1[i]) && strchr(n3, n1[i])) p[j++] = n1[i];
 
    int n = strlen(p), k = 0;
    bool *flags = new bool[n];
    for (i = 0; i < n; i++) flags[i] = false;
 
    for (i = 0; i < n; i++)
        if (!flags[i])
            for (j = i + 1; j < n; j++)
                if (p[i] == p[j]) flags[j] = true;
 
    for (i = 0; i < n; i++) if (!flags[i]) k++;
    cout<<k;
    return 0;
}
0
valeriikozlov
Эксперт С++
4673 / 2499 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
14.04.2013, 03:33 #7
Цитата Сообщение от A1exSun Посмотреть сообщение
Например, на входе:
234087
408209
1804
На выходе:
3
(числа 2, 0 и 8)
вместо 2 должно быть 4
0
A1exSun
C#
55 / 55 / 1
Регистрация: 09.03.2013
Сообщений: 214
14.04.2013, 11:56  [ТС] #8
Цитата Сообщение от valeriikozlov Посмотреть сообщение
вместо 2 должно быть 4
Да, 4. Невнимательно смотрел.
0
14.04.2013, 11:56
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.04.2013, 11:56
Привет! Вот еще темы с ответами:

Найти наименьшее среди тех чисел первой последовательности, которые не входят во вторую - C++
Может кто помочь с кодом для следующей задачи : Даны две последовательности по пять целых чисел в каждой. Найти наименьшее среди тех...

В алфавитном порядке вывести всё звонкие согласные, которые входят в каждое нечетное слово - C++
В алфавитном порядке вывести все звонкие согласные,которые входят в каждое нечетное слово и не входят ни в одно четное слово

В массиве целых чисел найти количество чисел с наименьшим количеством цифр - C++
9. В массиве целых чисел найти количество чисел с наименьшим количеством цифр. Например, в массиве {123, 34, 56, 1000, 20, 55000, 777,...

Дано натуральное число n>0 и последовательнось чисел из n елементов, найти количество всех чисел которые больше за 0 и меньше за 0 - C++
Всем привет, задача такова: Дано натуральное число n&gt;0 и последовательнось чисел из n елементов, найти количество всех чисел которые...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

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