Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
 Аватар для okman
15 / 21 / 8
Регистрация: 05.04.2013
Сообщений: 204

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

01.05.2013, 17:16. Показов 1303. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Существует энное количество цифр(динамический массив) в котором присутствуют цифры от 1 до 100. Все они повторяются кроме одного. Вопрос: как эту цифру найти?
1.Пример: 10 1 2 10 3 2 1 2 - в этом ряде эта цифра 3.
2.Пример: 13 44 1 44 20 46 20 13 46 - в этом ряде эта цифра 1.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
01.05.2013, 17:16
Ответы с готовыми решениями:

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

Массивы. Найти неповторяющееся число
Задача взята с форума. Непонятно, собственно, как передать параметры в функцию NotTwin(), которые, по идее она должна получать из...

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

19
 Аватар для Ternsip
670 / 198 / 29
Регистрация: 10.05.2012
Сообщений: 595
01.05.2013, 17:49
okman, если все повторяются 2 раза, а одно число 1 раз ? тогда тупо xor всех

Добавлено через 1 минуту
okman,
C++
1
2
3
4
5
6
7
8
9
10
#include <cstdio>
int main() {
    int n, ans, t;
    scanf("%d%d", &n, &ans);
    while(--n) {
        scanf("%d", &t);
        ans ^= t;
    }
    printf("%d", ans);
}
Добавлено через 1 минуту
okman, ввод :
8
10 1 2 10 3 2 1 2

Добавлено через 1 минуту
ибо, если конец файла не определён, то так
C++
1
2
3
4
int xor = 0, c;
while (cin >> c)
 xor = ^= c;
cout << xor;
0
 Аватар для okman
15 / 21 / 8
Регистрация: 05.04.2013
Сообщений: 204
01.05.2013, 17:50  [ТС]
Цитата Сообщение от Ternsip Посмотреть сообщение
okman, если все повторяются 2 раза, а одно число 1 раз ? тогда тупо xor всех

Добавлено через 1 минуту
okman,
C++
1
2
3
4
5
6
7
8
9
10
#include <cstdio>
int main() {
    int n, ans, t;
    scanf("%d%d", &n, &ans);
    while(--n) {
        scanf("%d", &t);
        ans ^= t;
    }
    printf("%d", ans);
}
Добавлено через 1 минуту
okman, ввод :
8
10 1 2 10 3 2 1 2

Добавлено через 1 минуту
ибо, если конец файла не определён, то так
C++
1
2
3
4
int xor = 0, c;
while (cin >> c)
 xor = ^= c;
cout << xor;
ну вроде могут повторятся и более 2 раз. Наверное я не удачный пример привел. Сорри. А можно комментарии к твоей программе?)
0
 Аватар для Ternsip
670 / 198 / 29
Регистрация: 10.05.2012
Сообщений: 595
01.05.2013, 17:53
okman, Если известно, что все числа в ней встречаются k раз (k > 1), кроме одного, которое встречается менее чем k раз (но хотя бы 1 раз) и k вам не известно, тогда
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include<iostream>
int c[32],n,a,b1,b2,c1,c2,k,x,i,j;
 
int main()
{
    scanf("%d",&n);
    for (i=0;i<n;i++)
    {
        scanf("%d",&a);
        if (!b1 || a==b1) b1=a,c1++;else
            if (!b2 || a==b2) b2=a,c2++;
        for (j=0;j<32;j++) c[j]+=(a>>j)&1;
    }
    k=std::max(c1,c2);
    for (i=0;i<32;i++) if (c[i]%k) x^=1<<i;
    printf("%d",x);
}
Добавлено через 1 минуту
okman, если вам что-то непонятно, задавайте вопрос.
1
 Аватар для okman
15 / 21 / 8
Регистрация: 05.04.2013
Сообщений: 204
01.05.2013, 17:55  [ТС]
Цитата Сообщение от Ternsip Посмотреть сообщение
okman, Если известно, что все числа в ней встречаются k раз (k > 1), кроме одного, которое встречается менее чем k раз (но хотя бы 1 раз) и k вам не известно, тогда
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include<iostream>
int c[32],n,a,b1,b2,c1,c2,k,x,i,j;
 
int main()
{
    scanf("%d",&n);
    for (i=0;i<n;i++)
    {
        scanf("%d",&a);
        if (!b1 || a==b1) b1=a,c1++;else
            if (!b2 || a==b2) b2=a,c2++;
        for (j=0;j<32;j++) c[j]+=(a>>j)&1;
    }
    k=std::max(c1,c2);
    for (i=0;i<32;i++) if (c[i]%k) x^=1<<i;
    printf("%d",x);
}
Добавлено через 1 минуту
okman, если вам что-то непонятно, задавайте вопрос.
спасибо большое, а как написать чтоб можно было числа с клавиатуры вводить? А то я нуб. ну то есть учусь пока.
0
 Аватар для Ternsip
670 / 198 / 29
Регистрация: 10.05.2012
Сообщений: 595
01.05.2013, 17:56
okman, Вот ещё код, просто freopen уберите для считывания с клавиатуры
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
#include <iostream>
#include <cmath>
#include <vector>
#include <algorithm>
 
using namespace std;
 
int main(){
    int n, k, one = -1, two = -1, cnt = 1, cnttwo = 1;
    const int size = 32;
    vector <int> mask(size, 0);
    cin >> n;
    for (int i = 0; i < n; i++){
        scanf("%d", &k);
        if (i == 0){
            one = k;
        }else{
            if (one == k)
                cnt++;
            else{
                if (two == -1){
                    two = k;
                }else{
                    if (k == two)
                        cnttwo++;
                }
            }
        }
        for (int j = 0; j < size; j++){
            mask[j] += ((k & (1<<j))>0);
        }
    }
    cnt = max(cnt, cnttwo);
    int ans = 0;
    for (int j = 0; j < size; j++){
        if (mask[j]%cnt > 0)
            ans = ans | (1<<j);
    }
    cout << ans;
    return 0;
}
0
Мой лучший друг-отладчик!
 Аватар для ZaMaZaN4iK
167 / 167 / 30
Регистрация: 24.06.2012
Сообщений: 662
Записей в блоге: 5
01.05.2013, 17:57
а решение черезе сортировку подсчётом? Как по мне, оно тут очень хорошо подходит
0
 Аватар для Ternsip
670 / 198 / 29
Регистрация: 10.05.2012
Сообщений: 595
01.05.2013, 17:59
ZaMaZaN4iK, Никак не проходит. В первой строке записано число n (1 ≤ n ≤ 10^6). Далее во второй строке записаны сами числа a1, a2,..., an (1 ≤ ai ≤ 10^9).
0
Мой лучший друг-отладчик!
 Аватар для ZaMaZaN4iK
167 / 167 / 30
Регистрация: 24.06.2012
Сообщений: 662
Записей в блоге: 5
01.05.2013, 18:02
так по условию вроде от 1 до 100
0
 Аватар для Ternsip
670 / 198 / 29
Регистрация: 10.05.2012
Сообщений: 595
01.05.2013, 18:05
ZaMaZaN4iK, ааа, ну тогда да, тогда обычной сортировкой подсчётом, тогда можно даже на случай, когда всё остальные повторяются любое число раз >= 2, тогда ваще халява D
0
 Аватар для okman
15 / 21 / 8
Регистрация: 05.04.2013
Сообщений: 204
01.05.2013, 18:07  [ТС]
Цитата Сообщение от Ternsip Посмотреть сообщение
ZaMaZaN4iK, Никак не проходит. В первой строке записано число n (1 ≤ n ≤ 10^6). Далее во второй строке записаны сами числа a1, a2,..., an (1 ≤ ai ≤ 10^9).
Я вот так пытался решить, но у меня не получилось
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
#include <iostream>
#include <conio.h> 
using namespace std;
int main(){
    setlocale(LC_ALL, "Russian");   
    int *darr,i,m,j;
    int arr[100];
    cout << "Введите количество элементов[m>0;m<=100]: ";
    cin >> m;
    darr=new int[m];
    cout << "Введите элементы[m="<<m<<"]: ";
    for (i=0; i<m; i++) {
        cin >> darr[i];
     
    };
    for (j=1; j<=100; j++){arr[j]=0;};
     
    for (i=0; i<m; i++) {arr[darr[i]]+=1;
    if(arr[darr[i]]==1)cout<<darr[i];
    };
    
    
     
    
   _getch();    
        return 0;
}
0
Мой лучший друг-отладчик!
 Аватар для ZaMaZaN4iK
167 / 167 / 30
Регистрация: 24.06.2012
Сообщений: 662
Записей в блоге: 5
01.05.2013, 18:07
Ternsip, вот-вот, и я о том же - решение элементарнейшее.Но только к великому сожалению, для относительно малых чисел
0
 Аватар для Ternsip
670 / 198 / 29
Регистрация: 10.05.2012
Сообщений: 595
01.05.2013, 18:08
okman,
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
#include <iostream>
#include <set>
#include <vector>
#include <limits>
#include <queue>
#include <string>
#include <map>
#include <algorithm>
 
using namespace std;
 
int main(){            
    freopen("input.txt", "rt", stdin);
    freopen("output.txt", "wt", stdout);
    int c;
    vector <int> mas(101, 0);
    while (cin >> c) {
        mas[c]++;
    }
    for (int i = 1; i < 101; i++) {
        if (mas[i] == 1) {
            cout << i;
        }
    }
    return 0;
}
1
 Аватар для okman
15 / 21 / 8
Регистрация: 05.04.2013
Сообщений: 204
01.05.2013, 18:08  [ТС]
Цитата Сообщение от Ternsip Посмотреть сообщение
ZaMaZaN4iK, ааа, ну тогда да, тогда обычной сортировкой подсчётом, тогда можно даже на случай, когда всё остальные повторяются любое число раз >= 2, тогда ваще халява D
может можно как-то мой код подправить, а то просто задача сам на массив.
0
 Аватар для Ternsip
670 / 198 / 29
Регистрация: 10.05.2012
Сообщений: 595
01.05.2013, 18:09
okman, обновите страницу, я уже подправил
0
 Аватар для okman
15 / 21 / 8
Регистрация: 05.04.2013
Сообщений: 204
01.05.2013, 18:24  [ТС]
Цитата Сообщение от Ternsip Посмотреть сообщение
okman, обновите страницу, я уже подправил
Я походу олень, что-то не понял, она просто выбила черный экран и все
0
 Аватар для Ternsip
670 / 198 / 29
Регистрация: 10.05.2012
Сообщений: 595
01.05.2013, 18:36
okman,
C++
1
2
freopen("input.txt", "rt", stdin);
    freopen("output.txt", "wt", stdout);
уберите
0
 Аватар для okman
15 / 21 / 8
Регистрация: 05.04.2013
Сообщений: 204
01.05.2013, 18:42  [ТС]
Цитата Сообщение от Ternsip Посмотреть сообщение
okman,
C++
1
2
freopen("input.txt", "rt", stdin);
    freopen("output.txt", "wt", stdout);
уберите
Я убирал, в там случае она не работает

Добавлено через 2 минуты
Цитата Сообщение от Ternsip Посмотреть сообщение
okman,
C++
1
2
freopen("input.txt", "rt", stdin);
    freopen("output.txt", "wt", stdout);
уберите
Чувак я что-то я вообще не секу, напиши просто чтоб я сразу мог ее запустить в вижуале. Просто я половину из того что ты написал я не понимаю
0
 Аватар для Ternsip
670 / 198 / 29
Регистрация: 10.05.2012
Сообщений: 595
01.05.2013, 18:44
okman,
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
#include <iostream>
#include <set>
#include <vector>
#include <limits>
#include <queue>
#include <string>
#include <map>
#include <algorithm>
 
using namespace std;
 
int main(){            
    int c;
    vector <int> mas(101, 0);
    int n = 10;
    for (int i = 0; i < n; i++) {
        cin >> c;
        mas[c]++;
    }
    for (int i = 1; i < 101; i++) {
        if (mas[i] == 1) {
            cout << i;
        }
    }
    return 0;
}
1
 Аватар для okman
15 / 21 / 8
Регистрация: 05.04.2013
Сообщений: 204
01.05.2013, 18:59  [ТС]
Цитата Сообщение от Ternsip Посмотреть сообщение
okman,
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
#include <iostream>
#include <set>
#include <vector>
#include <limits>
#include <queue>
#include <string>
#include <map>
#include <algorithm>
 
using namespace std;
 
int main(){            
    int c;
    vector <int> mas(101, 0);
    int n = 10;
    for (int i = 0; i < n; i++) {
        cin >> c;
        mas[c]++;
    }
    for (int i = 1; i < 101; i++) {
        if (mas[i] == 1) {
            cout << i;
        }
    }
    return 0;
}
спасибо большое, внимательно прочел код и понял ошибку свою щас попробую переделать Ну просто ради опята. Спасибо еще раз)

Добавлено через 9 минут
[QUOTE=Ternsip;4497070]okman,/QUOTE]
Вот я уже свой код переделал. Теперь тоже работает

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
#include <iostream>
#include <iostream>
#include <conio.h> 
using namespace std;
int main(){
    setlocale(LC_ALL, "Russian");   
    int *darr,i,m,j;
    int arr[100];
    cout << "Введите количество элементов[m>0;m<=100]: ";
    cin >> m;
    darr=new int[m];
    cout << "Введите элементы[m="<<m<<"]: ";
    for (i=0; i<m; i++) {
        cin >> darr[i];
     
    };
    for (j=1; j<=100; j++){arr[j]=0;};
     
    for (i=0; i<m; i++) {arr[darr[i]]+=1;
    
    };
    for(int i=0;i<m;i++)
        if(arr[i]==1){
        cout << i;
        
        };
    
     
    
   _getch();    
        return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.05.2013, 18:59
Помогаю со студенческими работами здесь

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

Ввести число. По выбору пользователя найти его противоположное, вычесть из него это же число, уменьшенное вдвое, или найти обратное число
var n: integer; begin Writeln('Vvedit chislo '); Readln(n); case n of 'n&lt;0' : n:=n*(-1); 'n&gt;0' : n:=n-n/2; ...

Дано двухзначное число. Найти число десятков, число единиц в нем, произведение его цифр
Помогите плиз=)) Дано двухзначное число. Найти число десятков ,число едениц в нем, произвеление его цыфр

Данно вещественное число X. Найти в нем первое число десятка, число десятых долей.
помогите плз решить Данно вещественное число X. Найти в нем первое число десятка, число десятых долей.

Найти число отрицательных, число нулевых и число положительных элементов массива
Я далека от программирования. Учусь вообще на фил.факе и на последнем году учебы нам преподнесли сюрприз в виде программирования на языке...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
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 На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru