Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
15 / 21 / 8
Регистрация: 05.04.2013
Сообщений: 204
1

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

01.05.2013, 17:16. Просмотров 723. Ответов 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.05.2013, 17:16
Ответы с готовыми решениями:

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

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

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

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

19
667 / 195 / 29
Регистрация: 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;
0
15 / 21 / 8
Регистрация: 05.04.2013
Сообщений: 204
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 раз. Наверное я не удачный пример привел. Сорри. А можно комментарии к твоей программе?)
0
667 / 195 / 29
Регистрация: 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, если вам что-то непонятно, задавайте вопрос.
1
15 / 21 / 8
Регистрация: 05.04.2013
Сообщений: 204
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, если вам что-то непонятно, задавайте вопрос.
спасибо большое, а как написать чтоб можно было числа с клавиатуры вводить? А то я нуб. ну то есть учусь пока.
0
667 / 195 / 29
Регистрация: 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;
}
0
Мой лучший друг-отладчик!
165 / 165 / 30
Регистрация: 24.06.2012
Сообщений: 662
Записей в блоге: 5
01.05.2013, 17:57 7
а решение черезе сортировку подсчётом? Как по мне, оно тут очень хорошо подходит
0
667 / 195 / 29
Регистрация: 10.05.2012
Сообщений: 595
01.05.2013, 17:59 8
ZaMaZaN4iK, Никак не проходит. В первой строке записано число n (1 ≤ n ≤ 10^6). Далее во второй строке записаны сами числа a1, a2,..., an (1 ≤ ai ≤ 10^9).
0
Мой лучший друг-отладчик!
165 / 165 / 30
Регистрация: 24.06.2012
Сообщений: 662
Записей в блоге: 5
01.05.2013, 18:02 9
так по условию вроде от 1 до 100
0
667 / 195 / 29
Регистрация: 10.05.2012
Сообщений: 595
01.05.2013, 18:05 10
ZaMaZaN4iK, ааа, ну тогда да, тогда обычной сортировкой подсчётом, тогда можно даже на случай, когда всё остальные повторяются любое число раз >= 2, тогда ваще халява D
0
15 / 21 / 8
Регистрация: 05.04.2013
Сообщений: 204
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;
}
0
Мой лучший друг-отладчик!
165 / 165 / 30
Регистрация: 24.06.2012
Сообщений: 662
Записей в блоге: 5
01.05.2013, 18:07 12
Ternsip, вот-вот, и я о том же - решение элементарнейшее.Но только к великому сожалению, для относительно малых чисел
0
667 / 195 / 29
Регистрация: 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;
}
1
15 / 21 / 8
Регистрация: 05.04.2013
Сообщений: 204
01.05.2013, 18:08  [ТС] 14
Цитата Сообщение от Ternsip Посмотреть сообщение
ZaMaZaN4iK, ааа, ну тогда да, тогда обычной сортировкой подсчётом, тогда можно даже на случай, когда всё остальные повторяются любое число раз >= 2, тогда ваще халява D
может можно как-то мой код подправить, а то просто задача сам на массив.
0
667 / 195 / 29
Регистрация: 10.05.2012
Сообщений: 595
01.05.2013, 18:09 15
okman, обновите страницу, я уже подправил
0
15 / 21 / 8
Регистрация: 05.04.2013
Сообщений: 204
01.05.2013, 18:24  [ТС] 16
Цитата Сообщение от Ternsip Посмотреть сообщение
okman, обновите страницу, я уже подправил
Я походу олень, что-то не понял, она просто выбила черный экран и все
0
667 / 195 / 29
Регистрация: 10.05.2012
Сообщений: 595
01.05.2013, 18:36 17
okman,
C++
1
2
freopen("input.txt", "rt", stdin);
    freopen("output.txt", "wt", stdout);
уберите
0
15 / 21 / 8
Регистрация: 05.04.2013
Сообщений: 204
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);
уберите
Чувак я что-то я вообще не секу, напиши просто чтоб я сразу мог ее запустить в вижуале. Просто я половину из того что ты написал я не понимаю
0
667 / 195 / 29
Регистрация: 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;
}
1
15 / 21 / 8
Регистрация: 05.04.2013
Сообщений: 204
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;
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.05.2013, 18:59

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

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

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

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

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


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

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

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