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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.09.2012, 23:29   #1
Qile
 
Регистрация: 28.09.2012
Сообщений: 6
Сообщение C++ проблема с циклом

Задача - сравнить два числа и узнать состоят ли они из одинаковых цифр. Количеством цифр пренебречь.

Моя программа:
Код:
#include <iostream>
using namespace std;

int ok;
int x, y;
int xlenght, ylenght;
int xarray[25], yarray[25];
int same, norepeat;

int main() {

do {
    cout << "Enter x, x>0" << endl;
    cin >> x;
    cout << "Enter y, y>0" << endl;
    cin >> y;

    xlenght=0;
    ylenght=0;

    while(x>0)
    {
        xarray[xlenght]=x%10;
        x=x/10;
        xlenght++;
    };

    while(y>0)
    {
        yarray[ylenght]=y%10;
        y=y/10;
        ylenght++;
    };

    cout << endl << "First number lenght is " << xlenght << endl;
    cout << "Second number lenght is " << ylenght << endl << endl;

    if(xlenght<ylenght)
    {
        int temp;
        xlenght=temp;
        xlenght=ylenght;
        ylenght=temp;
        cout << "X lenght < Y lenght, swaping!" << endl;
    }

    for(int i=0;i<xlenght;i++)
    {
        cout << "Number " << i << " of x is " << xarray[i] << endl;
    };
        cout << endl;
    for(int k=0;k<ylenght;k++)
    {
        cout << "Number " << k << " of y is " << yarray[k] << endl;
    };
        cout << endl;

    same=0;
    for(int b=0;b<xlenght;b++)
    {
        for(int n=0;n<ylenght;n++)
        {
            cout << "Comparing " << xarray[b] << " and " << yarray[n] << endl;
            if(xarray[b]==yarray[n])
            {
                cout << "It's OK!" << endl;
                if(norepeat!=xarray[b])
                {
                same++;
                norepeat=xarray[b];
                }
            }
            else cout << "It's BAD" << endl;
            }
        };

    cout << "Number of matches: "<< same << endl << endl;
    if(same==xlenght) cout << "Numbers have identical integers" << endl;
    else cout << "Numbers have different integers" << endl;

cout << " Continue (1) or end program (0)?" << endl;
cin >> ok;

}while (ok == 1);

return 0;
}
1. Если y > x, цикл заедает.
2. Принимаю любую критику по оптимизации
Qile вне форума Ответить с цитированием
Старый 29.09.2012, 00:10   #2
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,309
По умолчанию

У вас описаны массивы в предположении о количестве цифр числа.
Код:
int xarray[25], yarray[25];
Достаточно описать два массива размерностью 10 (элементы от 0 до 9).
Пишем функцию, в которой полученные числа целочисленно делим последовательно на 10 до тех пор, пока частное от деления больше 9.
Остаток является номером элемента массива.
В этот элемент добавляем единицу.
Т.о. функция возвращает массив, в котором для цифр числа, есть значения, а для отсутствующих цифр - нули.
Используем функцию для первого числа и, скажем, получаем массив A, затем используем функцию для второго числа и получаем массив, скажем B.
В цикле сравниваем поэлементно массивы. При сравнении достаточно определить, что в одинаковых элементах (по номеру) находятся не нулевые значения.
Как только в одной из ячеек ноль, а в соответствующей ячейке второго массива не ноль - совпадения нет.

Ну вот, накатал ...
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 29.09.2012, 00:25   #3
yurats
Пользователь
 
Регистрация: 28.09.2012
Сообщений: 20
По умолчанию

ViktorR меня опередил, пока я писал это более лаконичное решение.
ТС, выложить код, или лучше сравним после твоей реализации?
yurats вне форума Ответить с цитированием
Старый 29.09.2012, 03:03   #4
Qile
 
Регистрация: 28.09.2012
Сообщений: 6
По умолчанию

Цитата:
Сообщение от ViktorR Посмотреть сообщение
У вас описаны массивы в предположении о количестве цифр числа.
Код:
int xarray[25], yarray[25];
Достаточно описать два массива размерностью 10 (элементы от 0 до 9).
Пишем функцию, в которой полученные числа целочисленно делим последовательно на 10 до тех пор, пока частное от деления больше 9.
Остаток является номером элемента массива.
В этот элемент добавляем единицу.
Т.о. функция возвращает массив, в котором для цифр числа, есть значения, а для отсутствующих цифр - нули.
Используем функцию для первого числа и, скажем, получаем массив A, затем используем функцию для второго числа и получаем массив, скажем B.
В цикле сравниваем поэлементно массивы. При сравнении достаточно определить, что в одинаковых элементах (по номеру) находятся не нулевые значения.
Как только в одной из ячеек ноль, а в соответствующей ячейке второго массива не ноль - совпадения нет.

Ну вот, накатал ...
Спасибо. попробую реализовать.

Код:
#include <iostream>
using namespace std;

int ok;
int x, y;
int array[9][2];

int get_int(int integer, int mod) { 
    do {
        array[integer%10][mod]=1;
        integer=integer/10;
    }while(integer>0);
}

int main() {

do {
    cout << "Enter x, x>0" << endl;
    cin >> x;
    cout << "Enter y, y>0" << endl;
    cin >> y;

    get_int(x,1);
    get_int(y,2);

    ok=0;
    for(int i=0;i<=9;i++) {
            cout << "Comparing " << array[i][1] << " and " << array[i][2] << endl;
            if(array[i][1]==array[i][2]) ok++;
    };
    if(ok==10) cout << "Numbers have identical integers" << endl;
    else cout << "Numbers have different integers" << endl;

cout << " Continue (1) or end program (0)?" << endl;
cin >> ok;

}while (ok == 1);

return 0;
}

Последний раз редактировалось Stilet; 03.10.2012 в 10:32.
Qile вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с циклом! Ислам Помощь студентам 2 21.03.2011 00:48
Проблема с циклом while asp1k Общие вопросы Delphi 3 17.02.2011 14:29
Проблема с циклом DsDevis Паскаль, Turbo Pascal, PascalABC.NET 8 24.01.2011 00:01
проблема с циклом kiborgdelto Помощь студентам 1 16.10.2010 19:46
проблема с циклом Dima_D Общие вопросы Delphi 5 04.08.2010 16:41