С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
n00b.vcxproj
Кодер
47 / 46 / 2
Регистрация: 10.10.2010
Сообщений: 229
#1

Количество различных элементов в монотонном массиве - C++

19.10.2011, 18:58. Просмотров 1114. Ответов 10
Метки нет (Все метки)

Формат входных данных:
Сначала задано число N - количество элементов в массиве (N не превосходит 100). Далее через пробел записаны N целых чисел - элементы массива (числа типа int/longint). Элементы массива отсортированы по неубыванию (каждый элемент массива не меньше предыдущего элемента, например, {1, 2, 2, 3, 3, 3}).

Формат выходных данных
Необходимо вывести количество различных чисел в этом массиве.

пример:
ввод:
3
1 2 1
вывод:
2

Прошу помочь с циклом, определяющим количество различных чисел в массиве.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.10.2011, 18:58
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Количество различных элементов в монотонном массиве (C++):

Количество различных элементов в монотонном массиве - C++
Формат входных данных Сначала задано число N - количество элементов в массиве (N не превосходит 100). Далее через пробел записаны N...

Количество различных элементов в монотонном массиве - C++
Пожалуйста помогите решить сначала задано N - количество элементов в массиве (N не превосходит 100). Далее через пробел записаны N...

Найти количество различных элементов в массиве - C++
Найти количество различных элементов в массиве.

Найти количество различных элементов в массиве - C++
Ребят помогите решить задачу на с++. Условие: Дан целочисленный массив размера N. Необходимо найти количество разных елементов в данном...

Найти количество различных элементов в массиве. - C++
Найти количество различных элементов в массиве.

Определить количество различных элементов в массиве - C++
Задан массив действительных чисел. Определить количество различных элементов в массиве.

10
Choopa
17 / 17 / 0
Регистрация: 03.04.2011
Сообщений: 89
19.10.2011, 19:10 #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream.h>
#include <set.h>
void main()
{
 set<int>k;
 int n,i,a;
 cin>>n;
 for(i=0;i<n;i++)
 {  cin>>a;
 k.insert(a);
 }
 cout<<k.size();
 
}
1
silent_1991
Эксперт С++
4989 / 3046 / 149
Регистрация: 11.11.2009
Сообщений: 7,028
Завершенные тесты: 1
19.10.2011, 19:53 #3
Как вариант:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
 
int main()
{
    std::vector< int > vec((std::istream_iterator< int >(std::cin)), std::istream_iterator< int >());
 
    std::cout << std::unique(vec.begin(), vec.end()) - vec.begin() << std::endl;
 
    return 0;
}
Добавлено через 1 минуту
n00b.vcxproj, кстати, у вас условие и пример противоречат. В условии сказано, что элементы отсортированы по неубыванию, а в примере дана последовательность 1 2 1.
1
n00b.vcxproj
Кодер
47 / 46 / 2
Регистрация: 10.10.2010
Сообщений: 229
19.10.2011, 20:35  [ТС] #4
silent_1991, да, я знаю
там должно быть 1 2 2
0
Kastaneda
Jesus loves me
Эксперт С++
4697 / 2901 / 238
Регистрация: 12.12.2009
Сообщений: 7,389
Записей в блоге: 2
Завершенные тесты: 1
19.10.2011, 20:43 #5
если "руками", то примерно так:
C++
1
2
3
4
5
6
while(ptr != arr+size)//ptr - pointer to array, arr - array, size - size of array
{
   int tmp = *ptr;
   while(*ptr == tmp) ++ptr;
   ++count;
}
1
n00b.vcxproj
Кодер
47 / 46 / 2
Регистрация: 10.10.2010
Сообщений: 229
19.10.2011, 20:50  [ТС] #6
Kastaneda, а для чего применять указатель к массиву в Вашем цикле?
0
Kastaneda
Jesus loves me
Эксперт С++
4697 / 2901 / 238
Регистрация: 12.12.2009
Сообщений: 7,389
Записей в блоге: 2
Завершенные тесты: 1
19.10.2011, 20:57 #7
Цитата Сообщение от n00b.vcxproj Посмотреть сообщение
Kastaneda, а для чего применять указатель к массиву в Вашем цикле?
Для удобства, хотя можно так сделать:
C++
1
2
3
4
5
6
7
for(int i=0; i<size; i++)
{
   int tmp = arr[i];
   while(tmp == arr[i] && i<size)//в предыдущем коде во втором while тоже нужно добавить проверку на выход за границу массива
      ++i;
   ++count;
}
но имхо, через указатель красивее. Тут получается, что переменная-счетчик цикла меняет свое значение в теле цикла, что не есть хорошо.
1
Thinker
Эксперт С++
4229 / 2203 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
19.10.2011, 21:03 #8
Я бы так написал:
C++
1
2
3
4
count = n > 0 ? 1 : 0;
for (i = 1; i < n; i++)
   if (a[i] != a[i - 1])
      count++;
2
Kastaneda
19.10.2011, 21:06
  #9

Не по теме:

Thinker, да, так лучше)

0
Thinker
Эксперт С++
4229 / 2203 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
19.10.2011, 21:09 #10
Цитата Сообщение от Kastaneda Посмотреть сообщение

Не по теме:

Thinker, да, так лучше)

Не по теме:

Спасибо)

0
n00b.vcxproj
Кодер
47 / 46 / 2
Регистрация: 10.10.2010
Сообщений: 229
19.10.2011, 21:11  [ТС] #11
всем спасибо за актив, тема закрыта
0
19.10.2011, 21:11
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.10.2011, 21:11
Привет! Вот еще темы с ответами:

Найти количество различных элементов в массиве - C++
Дан целочисленный массив размера N, все элементы которого упоря-дочены (по возрастанию или по убыванию). Найти количество различных...

Посчитать количество различных элементов в массиве - C++
Дан линейный массив целых чисел ввести с клавиатуры не менее 10 элементов и посчитать сколько в нем различных чисел . помогите решить ...

Найти количество различных элементов в данном массиве - C++
Дано целочисленный массив размера N. Найти количество различных элементов в данном массиве.

Найти количество различных элементов в данном массиве - C++
4. Данный целочисленный массив размера N. Найти количество различных элементов в данном массиве.


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

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

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