Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.53/15: Рейтинг темы: голосов - 15, средняя оценка - 4.53
 Аватар для RayPas
2 / 0 / 0
Регистрация: 18.01.2013
Сообщений: 370

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

02.02.2014, 00:04. Показов 3358. Ответов 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
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
02.02.2014, 00:04
Ответы с готовыми решениями:

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

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

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

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

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

Добавлено через 1 минуту
Цитата Сообщение от Хулиган Посмотреть сообщение
в вашем коде в функции NotTwin() непонятно откуда появился int *A
ну создание динамического массива
0
 Аватар для Хулиган
88 / 83 / 21
Регистрация: 08.08.2012
Сообщений: 737
02.02.2014, 00:34
или отсортировать массив и сравнивать соседние элементы
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  [ТС]
Цитата Сообщение от Хулиган Посмотреть сообщение
или отсортировать массив и сравнивать соседние элементы
C++
1
2
3
4
5
for(int i = 0; i < size; ++i)
{
    if(A[i] != A[i+1])
    return A[i];
}
да, идея хорошая, но хочу научиться использовать указатели...мечта детства
0
 Аватар для Хулиган
88 / 83 / 21
Регистрация: 08.08.2012
Сообщений: 737
02.02.2014, 00:37
Цитата Сообщение от RayPas Посмотреть сообщение
ну создание динамического массива
int *A находится в области видимости функции int Massiv()

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

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

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

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


в каком месте она что то передает? приведите тот участок кода
так в том то и дело, у меня вопрос был в том, как правильно вызвать функции и передать параметры из Massiv в NotTwin(), поэтому в этом варианте кода нигде это еще и не происходит...
0
 Аватар для Хулиган
88 / 83 / 21
Регистрация: 08.08.2012
Сообщений: 737
02.02.2014, 00:58
Цитата Сообщение от RayPas Посмотреть сообщение
ак в том то и дело, у меня вопрос был в том, как правильно вызвать функции и передать параметры из Massiv в NotTwin(), поэтому в этом варианте кода нигде это еще и не происходит...
почитайте в литературе при функции с параметрами
0
272 / 266 / 146
Регистрация: 02.08.2012
Сообщений: 609
02.02.2014, 01:08
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
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
02.02.2014, 02:17
RayPas, после этой инструкции:
Цитата Сообщение от RayPas Посмотреть сообщение
delete [] A;
уже и неважно, что и как возвращать.
Лучше всего, передать указатель на уже выделенную до места вызова память и размер массива (по ссылке можно), в функции сделать с этим всем, что-то приличное и вернуть void. А после вызова использовать и удалить.
1
 Аватар для RayPas
2 / 0 / 0
Регистрация: 18.01.2013
Сообщений: 370
02.02.2014, 02:21  [ТС]
Цитата Сообщение от IGPIGP Посмотреть сообщение
RayPas, после этой инструкции:

уже и неважно, что и как возвращать.
Лучше всего, передать указатель на уже выделенную до места вызова память и размер массива (по ссылке можно), в функции сделать с этим всем, что-то приличное и вернуть void. А после вызова использовать и удалить.
да-да, понял глупость, спасибо)
0
 Аватар для RayPas
2 / 0 / 0
Регистрация: 18.01.2013
Сообщений: 370
03.02.2014, 17:31  [ТС]
Ребят, а помогите собственно с продолжением. Не пойму несколько вещей(все внимания на функцию NotTwin() )
Идея в том моя, чтобы при сравнении значений двух указателей, цикл завершался как только встретит близнеца и первый переместится на следующее значение в массиве, т.е. продолжится внешний цикл for. но срабатывает неправильно.
И еще, когда прохожу прогу по шагам и смотрю, что лежит в значениях указателей, то вижу, что как указатель(*ptr2) пройдет по всем заданным элементам массива, он забивается мусором и какими-то непонятными значениями. Почему это происходит? Объясните пожалуйста. и укажите в чем ошибка, что срабатывает неправильно

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
// ConsoleApplication2.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include "windows.h"
#include <iostream>
using namespace std;
 
 
int NotTwin(int arr[], int size)
 
{
    int *ptr1=0, *ptr2=0;
    
    for (ptr1 = arr; *ptr1 < size; *ptr1++){
        for (ptr2 = (ptr1+1); *ptr2 < size; *ptr2++)
            if (*ptr1 == *ptr2) {
                break; 
            } else cout << *ptr1;
    }
    return 0; 
}
 
 
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;
            }
    cout << endl << "А теперь мы попробуем выявить одно число, которое не повторяется в массиве" << endl;
    
        NotTwin(A, num);
        delete [] A;
    return 0;
 
}
 
 
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    Massiv();
    system("PAUSE");
    return 0;
}
Миниатюры
Массивы. Найти неповторяющееся число  
0
272 / 266 / 146
Регистрация: 02.08.2012
Сообщений: 609
03.02.2014, 18:12
Цитата Сообщение от RayPas Посмотреть сообщение
*ptr1 < size
Не понял этот момент. Элемент массива сравнивется с размером массива?

Цитата Сообщение от RayPas Посмотреть сообщение
ptr2 = (ptr1+1);
ptr2 забъётся мусором, потому что ptr1 + 1 выйдет за границу массива.
0
 Аватар для RayPas
2 / 0 / 0
Регистрация: 18.01.2013
Сообщений: 370
03.02.2014, 18:20  [ТС]
ага спасибо за ptr2. понял.
но, таким образом, хотел сделать так, чтобы изначально указатели не стояли на одном и том же элементе, иначе цикл не имеет смысла. ptr1 будет равен ptr2
ну а ptr1<size...думал так как раз-таки не выйдем за границу массива, сравнивая указатель с длинной массива...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
03.02.2014, 18:20
Помогаю со студенческими работами здесь

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

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

Массивы: найти общее число съеденных пирожных и прогнозируемое число съеденных пирожных за 10 лет
Условие: Начать свои тренировки в статистике Алексей решил с членов собственной семьи. В семье Алексея N человек, в этом месяце каждый...

Случайное, неповторяющееся число
Может кто поможет мне)) Вообщем мне надо, чтобы по нажатию кнопку у меня в переменную заносилось случайное число в заданном диапозоне ( Это...

Одномерные массивы. Найти число, встречающееся наибольшее количество раз
Задан массив целых чисел от -100 до 100. Найти число, встречающееся наибольшее количество раз


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru