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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.82
yuliyayuliya28
3 / 3 / 0
Регистрация: 06.03.2011
Сообщений: 319
13.04.2011, 21:13     Дана последовательность чисел. Найти количество различных чисел в этой последовательности #1
Дана последовательность чисел. Найти количество различных чисел в этой последовательности

Дана последовательность чисел. Найти количество различных чисел в этой последовательности
Написала код вроде работает.прошу пощи в изменении условия...чтобы не
писать эту строчку:


C++
1
x=n-count*2;



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
#include"stdafx.h"
#include"iostream"
#include<conio.h>
#include<stdlib.h>
#include<time.h>
using namespace std;
int main()
{
setlocale(LC_ALL,"");
int *a,n,l,i,j,count,x;
srand(time(NULL));
cout<<"Введите количество элементов ";
cin>>n;
cout<<endl;
a=new int[n];
for(int i=0;i<n;i++)
{
a[i]=rand()%10;
cout<<a[i]<<" ";
cout<<endl;
}
count=0;
for(i = 0; i < n; ++i)//находим количество одинаковых элементов
for(j = i; j < n; ++j)
if((i != j) && (a[i] == a[j]))
{
++count;
break;
}
x=n-count*2;
cout << "Количество различных чисел " << x << "\n";
 
 
getch();
return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.04.2011, 21:13     Дана последовательность чисел. Найти количество различных чисел в этой последовательности
Посмотрите здесь:

C++ Дана последовательность целых чисел, за которой следует 0.Найти количество нечетных элементов этой последовательности.
C++ Дана последовательность целых чисел, за которой следует 0. Найти количество четных элементов этой последовательности
C++ Дана последовательность целых чисел, за которой следует 0. Найти количество четных элементов этой последовательности.
Дана последовательность чисел. Найти количество различных чисел в этой последовательности C++
C++ Дана последовательность целых чисел, за которой следует 0. Найти количество элементов этой последовательности, кратных числу К
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
13.04.2011, 21:44     Дана последовательность чисел. Найти количество различных чисел в этой последовательности #2
yuliyayuliya28, Ваш код неправильно считает. Вот контрпример: допустим n равно 10, три числа одинаковые, а остальные все числа разные.
Ошибка здесь:
Цитата Сообщение от yuliyayuliya28 Посмотреть сообщение
for(i = 0; i < n; ++i)//находим количество одинаковых элементов
for(j = i; j < n; ++j)
if((i != j) && (a[i] == a[j]))
{
++count;
break;
}
Когда a[i] равно первому такому числу (которое повторяется), то count станет равной 1.
Когда a[i] равно второму такому числу, то count станет равной 2.
В итоге результат получится: "Количество различных чисел 6", а на самом деле результат должен быть равен 7.
Предлагаю вариант:
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
#include"stdafx.h"
#include"iostream"
#include<conio.h>
#include<stdlib.h>
#include<time.h>
using namespace std;
int main()
{
setlocale(LC_ALL,"");
int *a,n,i,count, mas[10]={0};
srand(time(NULL));
cout<<"Введите количество элементов ";
cin>>n;
cout<<endl;
a=new int[n];
for(int i=0;i<n;i++)
{
a[i]=rand()%10;
cout<<a[i]<<" ";
cout<<endl;
mas[a[i]]++;
}
count=0;
for(i = 0; i < 10; ++i)//находим количество одинаковых элементов
if(mas[i]>1)
{
count+=mas[i];
}
cout << "Количество различных чисел " << n-count << "\n";
 
 
getch();
return 0;
}
yuliyayuliya28
3 / 3 / 0
Регистрация: 06.03.2011
Сообщений: 319
13.04.2011, 22:05  [ТС]     Дана последовательность чисел. Найти количество различных чисел в этой последовательности #3
Спасибо большое. единственное мне не понятно что вот это mas[10]={0}и mas[a[i]]++;???? мы из массива 11 элементов заполненных нулями делаем массив в котором элементов столько а[i]?
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
14.04.2011, 06:10     Дана последовательность чисел. Найти количество различных чисел в этой последовательности #4
Цитата Сообщение от yuliyayuliya28 Посмотреть сообщение
единственное мне не понятно что вот это mas[10]={0}и mas[a[i]]++;???? мы из массива 11 элементов заполненных нулями делаем массив в котором элементов столько а[i]?
Напишу саму идею, код можете сами подредактировать (на самом деле массив a[] там не нужен, можно обойтись одной переменной типа int).
ИДЕЯ:
- так как Вы работаете только с числами в диапазоне [0,9]
Цитата Сообщение от valeriikozlov Посмотреть сообщение
a[i]=rand()%10;
, то заводим массив int mas[10], элементы которого изначально делаем равными 0 (для этого и пишем mas[10]={0}).
Имеем:
0 1 2 3 4 5 6 7 8 9 <- индексы массива mas[]
0 0 0 0 0 0 0 0 0 0 <- значения элементов массива mas[]
Теперь пошагово меняем значения этого массива. Например очередное случайное число равно 3. Тогда массив mas[] будет выглядеть так:
0 1 2 3 4 5 6 7 8 9 <- индексы массива mas[]
0 0 0 1 0 0 0 0 0 0 <- значения элементов массива mas[]
Следующее очередное случайное число равно 5. Тогда массив mas[] будет выглядеть так:
0 1 2 3 4 5 6 7 8 9 <- индексы массива mas[]
0 0 0 1 0 1 0 0 0 0 <- значения элементов массива mas[]
Следующее очередное случайное число равно 3. Тогда массив mas[] будет выглядеть так:
0 1 2 3 4 5 6 7 8 9 <- индексы массива mas[]
0 0 0 2 0 1 0 0 0 0 <- значения элементов массива mas[]
И т.д.
В конце получается, что если какое-то значение массива равно 0, то число (соответствующее этому индексу не попадалось ни разу). Если какое-то значение массива равно 1, то число попалось 1 раз. Если какое-то значение массива больше 1 .... - именно эти значения нас и интересуют.
neske
1419 / 786 / 55
Регистрация: 26.03.2010
Сообщений: 2,694
14.04.2011, 14:47     Дана последовательность чисел. Найти количество различных чисел в этой последовательности #5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <algorithm>
#include <iterator>
 
int main (void)
{
    const int SIZE = 10;
    int MAS[SIZE] = {1, 5, 3, 1, 1, 7, 5, 9, 3, 8};
 
    std::cout << "Start array: ";
    std::copy (MAS, MAS+SIZE, std::ostream_iterator <int> (std::cout, " "));
    std::cout << std::endl;
 
    std::sort (MAS, MAS+SIZE);
    std::cout << "Different elements: " << std::unique (MAS, MAS+SIZE) - MAS;
    std::cout << std::endl;
 
    return 0;
}
Vikki_19
0 / 0 / 0
Регистрация: 08.04.2014
Сообщений: 12
23.04.2014, 19:54     Дана последовательность чисел. Найти количество различных чисел в этой последовательности #6
yuliyayuliya28, А как для этой задачи применить порядок n*log(n)(необходимa сортировка)
Yandex
Объявления
23.04.2014, 19:54     Дана последовательность чисел. Найти количество различных чисел в этой последовательности
Ответ Создать тему
Опции темы

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