Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.07.2012, 23:26   #1
Sylar9
Форумчанин
 
Регистрация: 22.10.2011
Сообщений: 252
Вопрос Вводится два числа A и B(A и B больше нуля + меньше десятки в девятой степени), определить состоят ли они из одних и тех же чисел

Кому не сложно помогите
Вот сама задача
Вводится два числа A и B(A и B больше нуля + меньше десятки в девятой степени), определить состоят ли они из одних и тех же чисел.

Пример:

123 23122 = YES

44412 44512 = NO

STL нельзя
Sylar9 вне форума Ответить с цитированием
Старый 14.07.2012, 23:46   #2
ArmanPrestige
Главное желание.
Форумчанин
 
Регистрация: 28.11.2011
Сообщений: 122
По умолчанию

Остатком от деления может
Камни не кидать)
Я могу, Я хочу, Я буду!
ArmanPrestige вне форума Ответить с цитированием
Старый 14.07.2012, 23:51   #3
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

2Sylar9
Цитата:
определить состоят ли они из одних и тех же чисел.
не чисел, а цифр.

пс. загнать элементы в set и сравнить
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance

Последний раз редактировалось pproger; 15.07.2012 в 00:13.
pproger вне форума Ответить с цитированием
Старый 15.07.2012, 09:09   #4
Петррр
Форумчанин
 
Аватар для Петррр
 
Регистрация: 02.09.2011
Сообщений: 336
По умолчанию

Код:
#include <iostream>
#include <string>
#include <set>
#include <algorithm>
#include <sstream>

int main()
{
    int a = 123, b = 23122;
    std::stringstream stream;
    stream << a;
    std::string str_a = stream.str();
    stream.clear();
    stream << b;
    std::string str_b = stream.str();
    std::set<char> set_a(str_a.begin(), str_a.end());
    std::set<char> set_b(str_b.begin(), str_b.end());
    std::cout << std::boolalpha << std::equal(set_a.begin(), set_a.end(),
        set_b.begin()) << std::endl;
    std::cin.get();
}
Если ты не можешь найти то, ради чего стоит жить, лучше найти то, за что стоит умереть
Петррр вне форума Ответить с цитированием
Старый 15.07.2012, 09:48   #5
Петррр
Форумчанин
 
Аватар для Петррр
 
Регистрация: 02.09.2011
Сообщений: 336
По умолчанию

Код:
#include <stdio.h>
#include <stdlib.h>

size_t digits_count(int num)
{
    size_t count = 0;
    while (num)
    {
        num /= 10;
        count++;
    }
    return count;
}

void number_to_digits_array(int num, int *ptr)
{
    while (num)
    {
        *ptr++ = num % 10;
        num /= 10;
    }
}

size_t unique(int *ptr, size_t size)
{
    int* last = ptr + size;
    int* res = ptr;
    while (++ptr != last)
        if (!(*res == *ptr)) {
            *(++res) = *ptr;
        }
        else 
            size--;
    return size;
}

int int_cmp(const void* a, const void* b)
{
    return *(int*)a - *(int*)b;
}

int equal(int *ptr1, size_t size, int *ptr2)
{
    while (size--)
        if (*ptr1++ != *ptr2++)
            return 0;
    return 1;
}

int main()
{
    int a = 123, b = 23122;
    int res;
    size_t size_a = digits_count(a);
    size_t size_b = digits_count(b);
    int *ptr_a = (int*) malloc(sizeof(int) * size_a);
    int *ptr_b = (int*) malloc(sizeof(int) * size_b);
    number_to_digits_array(a, ptr_a);
    number_to_digits_array(b, ptr_b);
    qsort(ptr_a, size_a, sizeof(int), int_cmp);
    qsort(ptr_b, size_b, sizeof(int), int_cmp);
    size_a = unique(ptr_a, size_a);
    size_b = unique(ptr_b, size_b);
    if (size_a != size_b)
        puts("false");
    else
    {
        res = equal(ptr_a, size_a, ptr_b);
        puts(res ? "true" : "false");
    }
    free(ptr_a);
    free(ptr_b);
    system("pause");
}
Если ты не можешь найти то, ради чего стоит жить, лучше найти то, за что стоит умереть
Петррр вне форума Ответить с цитированием
Старый 15.07.2012, 11:36   #6
Sylar9
Форумчанин
 
Регистрация: 22.10.2011
Сообщений: 252
Вопрос

Цитата:
Сообщение от Петррр Посмотреть сообщение
Код:
#include <stdio.h>
#include <stdlib.h>

size_t digits_count(int num)
{
    size_t count = 0;
    while (num)
    {
        num /= 10;
        count++;
    }
    return count;
}

void number_to_digits_array(int num, int *ptr)
{
    while (num)
    {
        *ptr++ = num % 10;
        num /= 10;
    }
}

size_t unique(int *ptr, size_t size)
{
    int* last = ptr + size;
    int* res = ptr;
    while (++ptr != last)
        if (!(*res == *ptr)) {
            *(++res) = *ptr;
        }
        else 
            size--;
    return size;
}

int int_cmp(const void* a, const void* b)
{
    return *(int*)a - *(int*)b;
}

int equal(int *ptr1, size_t size, int *ptr2)
{
    while (size--)
        if (*ptr1++ != *ptr2++)
            return 0;
    return 1;
}

int main()
{
    int a = 123, b = 23122;
    int res;
    size_t size_a = digits_count(a);
    size_t size_b = digits_count(b);
    int *ptr_a = (int*) malloc(sizeof(int) * size_a);
    int *ptr_b = (int*) malloc(sizeof(int) * size_b);
    number_to_digits_array(a, ptr_a);
    number_to_digits_array(b, ptr_b);
    qsort(ptr_a, size_a, sizeof(int), int_cmp);
    qsort(ptr_b, size_b, sizeof(int), int_cmp);
    size_a = unique(ptr_a, size_a);
    size_b = unique(ptr_b, size_b);
    if (size_a != size_b)
        puts("false");
    else
    {
        res = equal(ptr_a, size_a, ptr_b);
        puts(res ? "true" : "false");
    }
    free(ptr_a);
    free(ptr_b);
    system("pause");
}
это точно работает? я так делал :
Код:
#include <iostream>
#include <locale.h>
#include <math.h>
using namespace std;
int main()
{
    setlocale(LC_ALL, "Rus");
    char* A; 
    char* B;
    cout << "Введите A больше нуля + меньше десятки в девятой степени" << endl;
    cin >> A;
    if(A<0 || A>pow(10.0,9))
        cout << "Не соотвествует условию" << endl;
 
    cout << "Введите B больше нуля + меньше десятки в девятой степени" << endl;
    cin >> B;
    if(B<0 || B>pow(10.0,9))
        cout << "Не соотвествует условию" << endl;
    int i=0, j;
    // Для А
    char *tokenA[10];
    tokenA[i]=strtok(A, " ");
    i++;
    while (tokenA[i-1] != NULL) //Разбивает строку на слова и указатель на каждое слово заносит в массив  tokenPtr
    { 
        tokenA[i] = strtok(NULL, " ");
        i++;        
    }
    // Для B
    char *tokenB[10];
    tokenB[i]=strtok(B, " ");
    i++;
    while (tokenB[i-1] != NULL) //Разбивает строку на слова и указатель на каждое слово заносит в массив  tokenPtr
    { 
        tokenB[i] = strtok(NULL, " ");
        i++;        
    }
 
    system("pause");
    return 0;
}
Sylar9 вне форума Ответить с цитированием
Старый 15.07.2012, 12:56   #7
Петррр
Форумчанин
 
Аватар для Петррр
 
Регистрация: 02.09.2011
Сообщений: 336
По умолчанию

http://liveworkspace.org/code/d52a0d...840a186357edee
http://liveworkspace.org/code/858bb1...06d2fb9d802865
Если ты не можешь найти то, ради чего стоит жить, лучше найти то, за что стоит умереть
Петррр вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывести номера тех столбцов, сумма элементов которых меньше нуля, и число таких столбцов Half Помощь студентам 7 16.04.2012 21:23
Числа меньше нуля в PHP moshkin_ura PHP 5 14.04.2012 19:00
Считать до тех пор, пока подкоренное выражение больше 0. Определить k - количество вычисленных F. Циклы. KatruKot Паскаль, Turbo Pascal, PascalABC.NET 2 14.06.2011 13:17
скрипт который не даст ввести с столбец A числа длиной меньше 3 и больше 10 Olya1985 Microsoft Office Excel 2 03.01.2011 03:15
Определить сумму тех веществееных чисел,которые больше Р. [Паскаль] Анна22 Помощь студентам 1 07.12.2010 20:34