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

По заданным числам определить, дружественны ли они - C++

Восстановить пароль Регистрация
 
Realmucho
0 / 0 / 0
Регистрация: 04.08.2016
Сообщений: 79
06.08.2016, 13:14     По заданным числам определить, дружественны ли они #1
Назовем два числа дружными, если они состоят из одинаковых множеств цифр (вне зависимости от их количества) . По заданным числам определить, дружественны ли они.


1)3 5
No

2) 35 533
Yes

3)123 1112
No

4)125550 5201
Yes
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.08.2016, 13:14     По заданным числам определить, дружественны ли они
Посмотрите здесь:

заданы 4 вещественных числа. определить, можно ли из отрезков, длины которых равны заданным числам, построить прямоугольник C++
C++ Определить, можно ли построить треугольник с длинами сторон, равным этим числам
Написать программу, которая по заданным трем числам определяет, является ли сумма каких-либо двух из них положительной C++
По заданным действительным числам вычислить интегралы C++
По заданным точкам двух треугольников определить подобны ли они C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Krock21rus
73 / 73 / 19
Регистрация: 18.11.2013
Сообщений: 369
Завершенные тесты: 2
06.08.2016, 14:33     По заданным числам определить, дружественны ли они #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
bool used1[10];
bool used2[10];
for(int i=0;i<10;i++)
    used1[i] = false, used2[i]=false;
int a,b;
cin >> a >> b;
if(a==0) used1[0]=true;
if(b==0) used2[0]=true;
while(a!=0)
    used1[a%10]=true,a/=10;
while(b!=0)
    used1[b%10]=true,b/=10;
bool ans = true;
for(int i=0;i<10;i++)
    if(used1[i]!=used2[i])
        ans = false;
if(ans) cout << "Yes";
else cout << "No";
Байт
 Аватар для Байт
14001 / 8832 / 1234
Регистрация: 24.12.2010
Сообщений: 16,008
06.08.2016, 15:12     По заданным числам определить, дружественны ли они #3
Krock21rus, Все правильно, только в строчках 14-17 лишние проходы цикла, когда уже стало ясно, что ans = false.
C++
1
2
3
4
for(i=0; i<10; i++)
  if (used1[i]!=used2[i]) break;
if (i<10) cout << "No";
else      cout << "Yes";
И переменная экономится...
Realmucho
0 / 0 / 0
Регистрация: 04.08.2016
Сообщений: 79
06.08.2016, 16:03  [ТС]     По заданным числам определить, дружественны ли они #4
а почему берем bool used1[10] ???
Krock21rus
73 / 73 / 19
Регистрация: 18.11.2013
Сообщений: 369
Завершенные тесты: 2
06.08.2016, 17:15     По заданным числам определить, дружественны ли они #5
Цитата Сообщение от Realmucho Посмотреть сообщение
а почему берем bool used1[10] ???
для удобства написания и большего понимания
конечно можно оставить один из них и проверять на другом числе на лету, но это больше по коду и сложнее воспринимать

Добавлено через 36 секунд
в строке 12 запрятался баг, не used1 а used2
zer0mail
2189 / 1872 / 187
Регистрация: 03.07.2012
Сообщений: 6,665
Записей в блоге: 1
06.08.2016, 17:41     По заданным числам определить, дружественны ли они #6
А если числа из 1000 знаков? Имхо, надо работать со строками.
Mr.X
Эксперт С++
 Аватар для Mr.X
2807 / 1583 / 248
Регистрация: 03.05.2010
Сообщений: 3,693
06.08.2016, 18:24     По заданным числам определить, дружественны ли они #7
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
//Назовем два числа дружными, если они состоят из одинаковых
//множеств цифр (вне зависимости от их количества) . По заданным
//числам определить, дружественны ли они.
 
 
//1)3 5
//No
 
//2) 35 533
//Yes
 
//3)123 1112
//No
 
//4)125550 5201
//Yes
///////////////////////////////////////////////////////////////////////////////
#include <iostream>
#include <set>
///////////////////////////////////////////////////////////////////////////////
typedef std::string             T_str;
typedef std::set    < char  >   T_symb_set;
///////////////////////////////////////////////////////////////////////////////
int     main()
{
    T_str   L;
    T_str   R;
 
    std::cin    >>  L
                >>  R;
 
    std::cout   <<  (
                            T_symb_set  (   L.begin(),      L.end()     )
                        ==  T_symb_set  (   R.begin(),      R.end()     )
                            ?   "Yes"
                            :   "No"
                    )
 
                <<  std::endl;
}
Krock21rus
73 / 73 / 19
Регистрация: 18.11.2013
Сообщений: 369
Завершенные тесты: 2
06.08.2016, 18:26     По заданным числам определить, дружественны ли они #8
ааа, хорошо, тогда вот вам оптимальнейший алгоритм(из тех, что я смог придумать)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
    bool used[2][10];
    for (int i = 0; i < 10; i++) used[0][i] = used[1][i] = false;
    char c;
    for (int j = 0; j < 2; j++)
    {
        cin >> c;
        while (isdigit(c))
        {
            used[j][c - '0'] = true;
            c = cin.get();
        }
    }
    bool ans = true;
    for(int i=0;i<10;i++)
    {
        if(used[0][i]!=used[1][i])
        {
            ans = false;
            break;
        }
    }
    if(ans) cout << "Yes";
    else cout << "No";
Добавлено через 54 секунды
Mr.X,
Цитата Сообщение от zer0mail Посмотреть сообщение
А если числа из 1000 знаков
А если числа из 10^10 знаков?
у вас памяти не хватит, а у меня всё норм будет

Добавлено через 1 минуту
Mr.X, а ещё у вас в 3 раза дольше
zer0mail
2189 / 1872 / 187
Регистрация: 03.07.2012
Сообщений: 6,665
Записей в блоге: 1
06.08.2016, 20:22     По заданным числам определить, дружественны ли они #9
Это Пушкин писал?
Цитата Сообщение от Krock21rus Посмотреть сообщение
int a,b;
cin >> a >> b;
Цитата Сообщение от Krock21rus Посмотреть сообщение
А если числа из 10^10 знаков?
у вас памяти не хватит, а у меня всё норм будет
Я привел какой-то свой алгоритм, у которого не хватит памяти? Вместо наездов лучше б "спасибо" сказали за полезный совет (int может не подойти для решения). Что касается "не хватит памяти", то строки можно считывать и обрабатывать порциями.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.08.2016, 22:16     По заданным числам определить, дружественны ли они
Еще ссылки по теме:

Определить треугольник по числам C++
По заданным целочисленным координатам на плоскости определить какую геометрическую фигуру они образуют C++
C++ Присвоить заданным переменным максимальное из их значений в случае, если они неравны, либо ноль, если равны

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

Или воспользуйтесь поиском по форуму:
Krock21rus
73 / 73 / 19
Регистрация: 18.11.2013
Сообщений: 369
Завершенные тесты: 2
07.08.2016, 22:16     По заданным числам определить, дружественны ли они #10
zer0mail, читайте все сообщения
Цитата Сообщение от zer0mail Посмотреть сообщение
А если числа из 10^10 знаков?
у вас памяти не хватит, а у меня всё норм будет
это адресовалось Mr.X
Цитата Сообщение от zer0mail Посмотреть сообщение
Что касается "не хватит памяти", то строки можно считывать и обрабатывать порциями.
посмотрите сюда
там лучший алгоритм, из тех, что я смог придумать
Yandex
Объявления
07.08.2016, 22:16     По заданным числам определить, дружественны ли они
Ответ Создать тему
Опции темы

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