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

Массивы. Найти неповторяющееся число - C++

Восстановить пароль Регистрация
 
 
RayPas
 Аватар для RayPas
2 / 0 / 0
Регистрация: 18.01.2013
Сообщений: 367
02.02.2014, 00:04     Массивы. Найти неповторяющееся число #1
Задача взята с форума.
Дан целочисленный массив, наподобие такого {1, 7, 3, 7, 8, 1, 3}. Все его элементы, кроме одного повторяются ровно 2 раза (две 1, две 7, две 3, но одна 8). Найти это неповторяющееся число. Числа и размер массива могут быть любыми.
Непонятно, собственно, как передать параметры в функцию NotTwin(), которые, по идее она должна получать из функции Massiv(); Ну и эти функции вызываются в main(). Помогите быдлокодеру, пожалуйста.

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
// ConsoleApplication2.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include "windows.h"
#include <iostream>
using namespace std;
 
 
int Massiv()
{
    int i;
    int num;
 
    cout << "Введите кол-во элементов" << endl;
    cin >> num;
 
    
    cout << "Введите числа, входящие в состав массива" << endl;
    int *A = new int[num];
        for (i = 0; i < num; i ++) 
            {
                cin >> A[i];
                // cout << A[i] << endl;
            }
    delete [] A;
    return A[i];
}
 
 
int NotTwin()
 
{
    int i , j;
    int *ptr1, *ptr2;
 
    for (i = 0; i < num; i ++)
        *ptr1 = A[i];
        for (j = 0; j < num; j ++)
            *ptr2 =  A[j];
            if (ptr1 != ptr2) {
                cout << *ptr1 << endl;
            }
    return 0; 
}
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    Massiv();
    cout << endl << "А теперь попробуем выявить одно число, которое не повторяется в массиве" << endl;
    NotTwin();
 
    system("PAUSE");
 
    return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
AlexOpryshko1
1 / 1 / 0
Регистрация: 31.01.2013
Сообщений: 41
03.02.2014, 18:23     Массивы. Найти неповторяющееся число #21
Проще всего сложить все элементы массива, используя "исключающее или" (XOR)
Все повторяющееся уйдут, останется только уникальный.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
GuGo1991
267 / 261 / 93
Регистрация: 02.08.2012
Сообщений: 609
03.02.2014, 19:11     Массивы. Найти неповторяющееся число #22
RayPas
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
void NotTwin(int arr[], int size)
{
    int* end = &arr[size];
    int *ptr1=0, *ptr2=0;
    int counter = 0;
    
    for(ptr1 = arr; ptr1 < end; ptr1++)
    {
        for(ptr2 = arr; ptr2 < end; ptr2++)
        {
            if (*ptr1 == *ptr2)
            {
                counter++;
            }
            if(counter > 1)
            {
                break;
            }
        }
        if(counter == 1)
        {
            cout << *ptr1 << endl;
        }
        counter = 0;
    }
}
RayPas
 Аватар для RayPas
2 / 0 / 0
Регистрация: 18.01.2013
Сообщений: 367
03.02.2014, 20:02  [ТС]     Массивы. Найти неповторяющееся число #23
усвоил как не выйти за рамки массива, и за одно, что счетчик решает проблему, спасибо Вам огромное.
А посоветуйте, по каким задачам лучше всего научится пользоваться указателями - по арифметическим или строчным?
как я уже понял, просто читать что-либо нет смысла, только практика...
GuGo1991
267 / 261 / 93
Регистрация: 02.08.2012
Сообщений: 609
04.02.2014, 01:06     Массивы. Найти неповторяющееся число #24
RayPas, не знаю даже что посоветовать, всё имеет место.
Если брать практику, то можно попытаться переписать готовую рабочую программу с
использованием указателей. Чем больше проблем встретится на пути, тем больше опыта.
RayPas
 Аватар для RayPas
2 / 0 / 0
Регистрация: 18.01.2013
Сообщений: 367
04.02.2014, 14:42  [ТС]     Массивы. Найти неповторяющееся число #25
GuGo1991, а Вы по чему учились?
GuGo1991
267 / 261 / 93
Регистрация: 02.08.2012
Сообщений: 609
04.02.2014, 15:42     Массивы. Найти неповторяющееся число #26
RayPas, я и сейчас учусь ) Раньше в основном читал, но в книге всё понятно, только часто задаёшься вопросом
"а зачем мне оно надо?" потому что не знаешь применения и многое не запоминается.
А помогает запомнить случай, когда при решении задачи сталкиваешься с проблемой, возвращаешься к книге,
решаешь проблему, возвращаешься снова к книге, перечитываешь и всё становится ясно.
Пройдя весь этот цикл, точно ничего не забудется ) Получается я учусь проблемами.
Форум отличная практика, к тому же можно ещё и пообщаться с опытными людьми, выслушать критику,
терпеть упрёки (самое главное!) и стараться не забрасывать учёбу по каким-либо причинам.
ИМХО, конечно, может кто-нибудь посоветует иначе.
RayPas
 Аватар для RayPas
2 / 0 / 0
Регистрация: 18.01.2013
Сообщений: 367
04.02.2014, 15:59  [ТС]     Массивы. Найти неповторяющееся число #27
GuGo1991 , Вы знаете узнаю в Вас себя. Только на более ранней стадии, когда тупо читаю книги и только сейчас появилось время именно взяться за практику. Я вообще больше по паскалю, как-то мне он до некоторого времени логичнее казался. Но, надо следить за трендами, а Си++ и вообще ООП, насколько мне известно - сейчас самый популярные методы разработки. Хочется углубиться в написании приложенек для телефонов, но пока не совсем понятно, как мне в этом помогут указатели)) В общем на самой-самой ранней стадии я еще.
оо да...упреки...было было и такое, не то что упреки, но и оскорбления)
TrueBit
 Аватар для TrueBit
95 / 95 / 12
Регистрация: 19.11.2012
Сообщений: 195
04.02.2014, 18:49     Массивы. Найти неповторяющееся число #28
Можно так(выводит эл-ты массива int, которые встречаются ровно 1 раз):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <map>
 
int main() {
    int array[] = { 1, 7, 3, 7, 8, 1, 3 };
    std::map<int,int> counter;
 
    for(int i=0; i < sizeof(array)/sizeof(int); i++)
        counter[ array[i] ]++;
 
    std::cout << "Elements: ";
    for(size_t i=0; i<counter.size(); i++)
        if( counter[i] == 1 )
            std::cout << ' ' << i;
 
    getchar();
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.02.2014, 19:00     Массивы. Найти неповторяющееся число
Еще ссылки по теме:

C++ как сложить/умножить/найти большее/найти меньшее/найти средние число
C++ Получить из массива случайное неповторяющееся значение
C++ Найти число, входящее во все массивы

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

Или воспользуйтесь поиском по форуму:
RayPas
 Аватар для RayPas
2 / 0 / 0
Регистрация: 18.01.2013
Сообщений: 367
04.02.2014, 19:00  [ТС]     Массивы. Найти неповторяющееся число #29
TrueBit ,спасибо, конечно , но с объектами map еще не знаком...
Yandex
Объявления
04.02.2014, 19:00     Массивы. Найти неповторяющееся число
Ответ Создать тему
Опции темы

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