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

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

Восстановить пароль Регистрация
 
okman
 Аватар для okman
15 / 21 / 1
Регистрация: 05.04.2013
Сообщений: 203
01.05.2013, 17:16     найти неповторяющееся число #1
Существует энное количество цифр(динамический массив) в котором присутствуют цифры от 1 до 100. Все они повторяются кроме одного. Вопрос: как эту цифру найти?
1.Пример: 10 1 2 10 3 2 1 2 - в этом ряде эта цифра 3.
2.Пример: 13 44 1 44 20 46 20 13 46 - в этом ряде эта цифра 1.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.05.2013, 17:16     найти неповторяющееся число
Посмотрите здесь:

C++ Найти число в двоичной записи которого максимальное число единиц
C++ Найти неповторяющееся число в массиве
Дано натуральное число n и действительное число а, найти, используя цикл C++
Некоторое число оканчивается на 2. Если же эту его последнюю цифру переставить на первое место, то число удвоится. Найти это число C++
C++ как сложить/умножить/найти большее/найти меньшее/найти средние число
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ternsip
 Аватар для Ternsip
660 / 188 / 6
Регистрация: 10.05.2012
Сообщений: 595
01.05.2013, 17:49     найти неповторяющееся число #2
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;
okman
 Аватар для okman
15 / 21 / 1
Регистрация: 05.04.2013
Сообщений: 203
01.05.2013, 17:50  [ТС]     найти неповторяющееся число #3
Цитата Сообщение от 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 раз. Наверное я не удачный пример привел. Сорри. А можно комментарии к твоей программе?)
Ternsip
 Аватар для Ternsip
660 / 188 / 6
Регистрация: 10.05.2012
Сообщений: 595
01.05.2013, 17:53     найти неповторяющееся число #4
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, если вам что-то непонятно, задавайте вопрос.
okman
 Аватар для okman
15 / 21 / 1
Регистрация: 05.04.2013
Сообщений: 203
01.05.2013, 17:55  [ТС]     найти неповторяющееся число #5
Цитата Сообщение от 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, если вам что-то непонятно, задавайте вопрос.
спасибо большое, а как написать чтоб можно было числа с клавиатуры вводить? А то я нуб. ну то есть учусь пока.
Ternsip
 Аватар для Ternsip
660 / 188 / 6
Регистрация: 10.05.2012
Сообщений: 595
01.05.2013, 17:56     найти неповторяющееся число #6
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;
}
ZaMaZaN4iK
Мой лучший друг-отладчик!
 Аватар для ZaMaZaN4iK
163 / 163 / 9
Регистрация: 24.06.2012
Сообщений: 662
Записей в блоге: 5
Завершенные тесты: 1
01.05.2013, 17:57     найти неповторяющееся число #7
а решение черезе сортировку подсчётом? Как по мне, оно тут очень хорошо подходит
Ternsip
 Аватар для Ternsip
660 / 188 / 6
Регистрация: 10.05.2012
Сообщений: 595
01.05.2013, 17:59     найти неповторяющееся число #8
ZaMaZaN4iK, Никак не проходит. В первой строке записано число n (1 ≤ n ≤ 10^6). Далее во второй строке записаны сами числа a1, a2,..., an (1 ≤ ai ≤ 10^9).
ZaMaZaN4iK
Мой лучший друг-отладчик!
 Аватар для ZaMaZaN4iK
163 / 163 / 9
Регистрация: 24.06.2012
Сообщений: 662
Записей в блоге: 5
Завершенные тесты: 1
01.05.2013, 18:02     найти неповторяющееся число #9
так по условию вроде от 1 до 100
Ternsip
 Аватар для Ternsip
660 / 188 / 6
Регистрация: 10.05.2012
Сообщений: 595
01.05.2013, 18:05     найти неповторяющееся число #10
ZaMaZaN4iK, ааа, ну тогда да, тогда обычной сортировкой подсчётом, тогда можно даже на случай, когда всё остальные повторяются любое число раз >= 2, тогда ваще халява D
okman
 Аватар для okman
15 / 21 / 1
Регистрация: 05.04.2013
Сообщений: 203
01.05.2013, 18:07  [ТС]     найти неповторяющееся число #11
Цитата Сообщение от 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;
}
ZaMaZaN4iK
Мой лучший друг-отладчик!
 Аватар для ZaMaZaN4iK
163 / 163 / 9
Регистрация: 24.06.2012
Сообщений: 662
Записей в блоге: 5
Завершенные тесты: 1
01.05.2013, 18:07     найти неповторяющееся число #12
Ternsip, вот-вот, и я о том же - решение элементарнейшее.Но только к великому сожалению, для относительно малых чисел
Ternsip
 Аватар для Ternsip
660 / 188 / 6
Регистрация: 10.05.2012
Сообщений: 595
01.05.2013, 18:08     найти неповторяющееся число #13
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;
}
okman
 Аватар для okman
15 / 21 / 1
Регистрация: 05.04.2013
Сообщений: 203
01.05.2013, 18:08  [ТС]     найти неповторяющееся число #14
Цитата Сообщение от Ternsip Посмотреть сообщение
ZaMaZaN4iK, ааа, ну тогда да, тогда обычной сортировкой подсчётом, тогда можно даже на случай, когда всё остальные повторяются любое число раз >= 2, тогда ваще халява D
может можно как-то мой код подправить, а то просто задача сам на массив.
Ternsip
 Аватар для Ternsip
660 / 188 / 6
Регистрация: 10.05.2012
Сообщений: 595
01.05.2013, 18:09     найти неповторяющееся число #15
okman, обновите страницу, я уже подправил
okman
 Аватар для okman
15 / 21 / 1
Регистрация: 05.04.2013
Сообщений: 203
01.05.2013, 18:24  [ТС]     найти неповторяющееся число #16
Цитата Сообщение от Ternsip Посмотреть сообщение
okman, обновите страницу, я уже подправил
Я походу олень, что-то не понял, она просто выбила черный экран и все
Ternsip
 Аватар для Ternsip
660 / 188 / 6
Регистрация: 10.05.2012
Сообщений: 595
01.05.2013, 18:36     найти неповторяющееся число #17
okman,
C++
1
2
freopen("input.txt", "rt", stdin);
    freopen("output.txt", "wt", stdout);
уберите
okman
 Аватар для okman
15 / 21 / 1
Регистрация: 05.04.2013
Сообщений: 203
01.05.2013, 18:42  [ТС]     найти неповторяющееся число #18
Цитата Сообщение от 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);
уберите
Чувак я что-то я вообще не секу, напиши просто чтоб я сразу мог ее запустить в вижуале. Просто я половину из того что ты написал я не понимаю
Ternsip
 Аватар для Ternsip
660 / 188 / 6
Регистрация: 10.05.2012
Сообщений: 595
01.05.2013, 18:44     найти неповторяющееся число #19
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;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.05.2013, 18:59     найти неповторяющееся число
Еще ссылки по теме:

Массивы. Найти неповторяющееся число C++
C++ Ввести число n, разбить число на цифры, и найти сумму этих цифр
C++ Получить из массива случайное неповторяющееся значение

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

Или воспользуйтесь поиском по форуму:
okman
 Аватар для okman
15 / 21 / 1
Регистрация: 05.04.2013
Сообщений: 203
01.05.2013, 18:59  [ТС]     найти неповторяющееся число #20
Цитата Сообщение от 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;
}
Yandex
Объявления
01.05.2013, 18:59     найти неповторяющееся число
Ответ Создать тему
Опции темы

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