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

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

01.05.2013, 17:16. Показов 1280. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru