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

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

Войти
Регистрация
Восстановить пароль
 
 
RayPas
2 / 0 / 0
Регистрация: 18.01.2013
Сообщений: 370
#1

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

02.02.2014, 00:04. Просмотров 974. Ответов 28
Метки нет (Все метки)

Задача взята с форума.
Дан целочисленный массив, наподобие такого {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;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.02.2014, 00:04
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Массивы. Найти неповторяющееся число (C++):

найти неповторяющееся число - C++
Существует энное количество цифр(динамический массив) в котором присутствуют цифры от 1 до 100. Все они повторяются кроме одного. Вопрос:...

Найти неповторяющееся число в массиве - C++
ан целочисленный массив, наподобие такого {1, 7, 3, 7, 8, 1, 3}. Все его элементы, кроме одного повторяются ровно 2 раза (две 1, две 7, две...

Массивы. Найти четвертое отрицательное число - C++
Дан одномерный массив. Найти в нем четвертое отрицательное число(если его нет то вывести на екран текст: не найдено число)

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

Получить из массива случайное неповторяющееся значение - C++
BlackJack подскажите как из этого массива достать случайное значение, чтобы оно при этом было оригинальным, то есть не повторялось. ...

Циклически сдвигать заданное число вправо пока не найдется большее число (массивы) - C++
Есть исходный массив mas ={1,1,0,1,0,1} в котором представлено число 2 СС необходимо циклически сдвигать его вправо пока не найдется...

28
KOPOJI
Эксперт HTML/CSSЭксперт PHP
16701 / 6623 / 433
Регистрация: 12.06.2012
Сообщений: 19,880
Завершенные тесты: 1
02.02.2014, 00:12 #2
В голову приходит два способа решения:
1. Решение "в лоб", неоптимальное - в цикле пробегаться по массиву столько раз, сколько цифр в переданном массиве (для каждого символа - дополнительный цикл)
2. Альтернатива - динамические массивы (ну или векторы, например, раз уж c++). В цикле пробежаться сначала один раз по полученному массиву, добавить в динамический массив в качестве ключа, значение по умолчанию - ноль. (т.е., наподобие arr[8] = 0. После чего отдельным циклом пробежаться, если существует arr[9], то arr[9]++ Как-то так, код писать лень..

З.Ы. по-любому, есть и еще реализации (возможно, лучше этой)..
1
Craw
235 / 46 / 4
Регистрация: 10.06.2012
Сообщений: 268
Записей в блоге: 1
02.02.2014, 00:21 #3
А в чём проблема? Вызывайте NotTwin с нужными параметрами из функции Massiv.
Ещё не понятно, куда функция Massiv возвращает значение последнего элемента массива - это значение нигде не используется. В таком случае вместо int тип функции должен быть void (т.к. она, фактически, процедура).
1
Хулиган
85 / 80 / 12
Регистрация: 08.08.2012
Сообщений: 737
02.02.2014, 00:28 #4
можно циклически посчитать сумму S1 всех чисел, при этом каждое число добавлять в контейнер "set"...в контейнере будут записаны числа в единичном экземпляре..находим сумму квадратов S2 каждого числа из set и от нее отнимаем сумму S1
num = S2 - S1
1
RayPas
2 / 0 / 0
Регистрация: 18.01.2013
Сообщений: 370
02.02.2014, 00:28  [ТС] #5
Цитата Сообщение от Craw Посмотреть сообщение
А в чём проблема? Вызывайте NotTwin с нужными параметрами из функции Massiv.
Ещё не понятно, куда функция Massiv возвращает значение последнего элемента массива - это значение нигде не используется. В таком случае вместо int тип функции должен быть void (т.к. она, фактически, процедура).
хм, черт, пробовал так до этого, но не получалось. Спасибо за волшебный пинок!)
Теперь ругается на неинециализированные ptr'ы, но мне главное с этим было разобраться, теперь уже схема работы...)
спасибо Вам большое)
0
Хулиган
85 / 80 / 12
Регистрация: 08.08.2012
Сообщений: 737
02.02.2014, 00:30 #6
в вашем коде в функции NotTwin() непонятно откуда появился int *A
0
RayPas
2 / 0 / 0
Регистрация: 18.01.2013
Сообщений: 370
02.02.2014, 00:33  [ТС] #7
кстати, ребят, а КАК посоветуете ООП изучать? вообще с чего начинают? курс каких-то базовых задач или же что-то более серьезное?

Добавлено через 1 минуту
Цитата Сообщение от Хулиган Посмотреть сообщение
в вашем коде в функции NotTwin() непонятно откуда появился int *A
ну создание динамического массива
0
Хулиган
85 / 80 / 12
Регистрация: 08.08.2012
Сообщений: 737
02.02.2014, 00:34 #8
или отсортировать массив и сравнивать соседние элементы
C++
1
2
3
4
5
for(int i = 0; i < size; ++i)
{
    if(A[i] != A[i+1])
    return A[i];
}
0
RayPas
2 / 0 / 0
Регистрация: 18.01.2013
Сообщений: 370
02.02.2014, 00:35  [ТС] #9
Цитата Сообщение от Хулиган Посмотреть сообщение
или отсортировать массив и сравнивать соседние элементы
C++
1
2
3
4
5
for(int i = 0; i < size; ++i)
{
    if(A[i] != A[i+1])
    return A[i];
}
да, идея хорошая, но хочу научиться использовать указатели...мечта детства
0
Хулиган
85 / 80 / 12
Регистрация: 08.08.2012
Сообщений: 737
02.02.2014, 00:37 #10
Цитата Сообщение от RayPas Посмотреть сообщение
ну создание динамического массива
int *A находится в области видимости функции int Massiv()

Добавлено через 1 минуту
Цитата Сообщение от RayPas Посмотреть сообщение
но хочу научиться использовать указатели...мечта детства
ну напишите тогда сортировку используя указатели
0
RayPas
2 / 0 / 0
Регистрация: 18.01.2013
Сообщений: 370
02.02.2014, 00:42  [ТС] #11
Цитата Сообщение от Хулиган Посмотреть сообщение
int *A находится в области видимости функции int Massiv()

Добавлено через 1 минуту

ну напишите тогда сортировку используя указатели
ну да...а почему нет? тем более теперь когда с массивом А работает только функ-я Massiv, которая передает ее в NotTwins...по крайней мере до этого заносилось и выводилось все правильно
0
Хулиган
85 / 80 / 12
Регистрация: 08.08.2012
Сообщений: 737
02.02.2014, 00:48 #12
Цитата Сообщение от RayPas Посмотреть сообщение
ну да...а почему нет? тем более теперь когда с массивом А работает только функ-я Massiv
откуда А в функции int NotTwin?? он в ней нигде не объявлен и не является аргументом функции? функция даже не знает что это.

Цитата Сообщение от RayPas Посмотреть сообщение
которая передает ее в NotTwins
в каком месте она что то передает? приведите тот участок кода
0
RayPas
2 / 0 / 0
Регистрация: 18.01.2013
Сообщений: 370
02.02.2014, 00:53  [ТС] #13
Цитата Сообщение от Хулиган Посмотреть сообщение
откуда А в функции int NotTwin?? он в ней нигде не объявлен и не является аргументом функции? функция даже не знает что это.


в каком месте она что то передает? приведите тот участок кода
так в том то и дело, у меня вопрос был в том, как правильно вызвать функции и передать параметры из Massiv в NotTwin(), поэтому в этом варианте кода нигде это еще и не происходит...
0
Хулиган
85 / 80 / 12
Регистрация: 08.08.2012
Сообщений: 737
02.02.2014, 00:58 #14
Цитата Сообщение от RayPas Посмотреть сообщение
ак в том то и дело, у меня вопрос был в том, как правильно вызвать функции и передать параметры из Massiv в NotTwin(), поэтому в этом варианте кода нигде это еще и не происходит...
почитайте в литературе при функции с параметрами
0
GuGo1991
267 / 261 / 93
Регистрация: 02.08.2012
Сообщений: 609
02.02.2014, 01:08 #15
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
int NotTwin(int arr[], int size);
 
void 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;
            }
    
    cout << endl;
    
    int result = NotTwin(A, num);
    
    delete [] A;
    cout << result << endl;
}
 
 
int NotTwin(int arr[], int size)
 
{
    int counter = 0;
    for(int i = 0; i < size; i++)
    {
        for(int j = 0; j < size; j++)
        {
            if(arr[i] == arr[j])
                counter++;
        }
        if(counter > 1)
            counter = 0;
        else
        {
            return arr[i];
        }
    }
}

В main вызовите только функцию Massiv().
А с указателями можете поиграться.
1
02.02.2014, 01:08
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.02.2014, 01:08
Привет! Вот еще темы с ответами:

Некоторое число оканчивается на 2. Если же эту его последнюю цифру переставить на первое место, то число удвоится. Найти это число - C++
Некоторое число оканчивается на 2. Если же эту его последнюю цифру переставить на первое место, то число удвоится. Найти это число.

Простое число и массивы - C++
есть задача: Дан массив n целых чисел. Если в массиве есть хотя бы одно простое число, то создается новый массив, в котором все члены...

Одномерные массивы - самое большое по модулю число - C++
Доброе время суток! Ребята, задачка такая интересная, что крышу срывает!!! Описать массив типа double с количеством элементов 25. ...

Двумерные массивы. Подсчитать число элементов матрицы - C++
помогите пожалуйста написать программы 2.Подсчитать число элементов матрицы Q(9x11), остаток от деления которых на пять равен единице.


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

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

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