2016-01-15 3 views
-1

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

Я пытался это, но проблема, я получаю результат следующим образом:

Например ... {1,1,1,1,4,6,4,7,4}

число 1 повторяется 4 раза

число 1 повторяется 3 раза

число 1 повторяется 2 раза

оцепенелым эр 1 повторяется 1 раз

Число 4 повторяется 3 раза

Число 6 повторяется 1 раз

Число 4 повторяется 2 раза

Число 7 повтор ют 1 раз

число 4 повторяется 1 раз

проблема заключается в тха т проверяет следующий номер со следующими номерами, не пропуская его, или не зная, он написал его перед

#include <iostream> 
#include <string> 
using namespace std; 
int main() { 
    int x[10]; 
    for (int i=0;i<10;i++) { 
     cin>>x[i]; 
    } 

    for (int i=0;i<9;i++) { 
     int count=1; 
     for (int j=i+1;j<10;j++) { 
      if (x[i]==x[j]) count++; 
     } 
     cout<<"The number "<<x[i]<<" is repeated "<<count<<" times"<<"\n"; 
    } 
} 
+5

Подсказка: попробуйте использовать 'зЬй :: Карта '. – andand

+1

Как еще один намек, в вашей программе есть две петли: одна, где вы читаете вещи, и секунда, где вы сообщаете счет. – templatetypedef

+0

Уже 2 петли !!! для (int i = 0; i <9; i ++) { int count = 1; for (int j = i + 1; j <10; j ++) { if (x [i] == x [j]) count ++; } cout << "Число" << x [i] << "повторяется" << count << "times" << "\ n"; } –

ответ

1

Проблемы с вашим кодом цифра, которые вы повторно процесс, который вы уже обработан. Поэтому, если в позиции 0 есть 1, а в другом случае 1 в позиции 5, то вы будете обрабатывать 1 в позиции 5 еще раз, когда вы попадете туда в цикле.

Таким образом, вам нужен способ решить, было ли какое-либо число уже обработано или нет. Простым способом является добавление второго массива (изначально все значения равны 0), и всякий раз, когда вы обрабатываете число, вы отмечаете все позиции, где этот элемент встречается. Теперь перед обработкой элемента вы проверяете, если он уже обработан, и ничего не делайте, если это так.

Кроме того, попытайтесь отступы ваш код правильно :)

C++ код:

int main(void) { 
    const int N = 10; 

    int A[N]; 
    for(int i = 0; i < N; i++) 
     cin >> A[i]; 

    int seen[N]; 
    for(int i = 0; i < N; i++) 
     seen[i] = 0; 

    for(int i = 0; i < N; i++) { 
     if(seen[i] == 0) { 
      int count = 0; 
      for(int j = i; j < N; j++) 
       if(A[j] == A[i]) { 
        count += 1; 
        seen[j] = 1; 
       } 
      cout << A[i] << " occurs " << count << " times" << endl; 
     } 
    } 

    return 0; 
} 
+0

@MahmoudNabil Проверьте обновленный ответ. – saadtaame

+0

Merci beaucoup mon ami <3 –

1

Вот довольно простая реализация с использованием std::map.

#include <map> 
#include <vector> 
#include <cstdlib> 
#include <iostream> 

std::map<int, unsigned int> counter(const std::vector<int>& vals) { 
    std::map<int, unsigned int> rv; 

    for (auto val = vals.begin(); val != vals.end(); ++val) { 
     rv[*val]++; 
    } 

    return rv; 
} 

void display(const std::map<int, unsigned int>& counts) { 
    for (auto count = counts.begin(); count != counts.end(); ++count) { 
     std::cout << "Value " << count->first << " has count " 
        << count->second << std::endl; 
    } 
} 

int main(int argc, char** argv) { 
    std::vector<int> mem = {1, 1, 1, 1, 4, 6, 4, 7, 4}; 
    display(counter(mem)); 

    return 0; 
} 

Выход:

Value 1 has count 4 
Value 4 has count 3 
Value 6 has count 1 
Value 7 has count 1 

Составитель используя стандарт C++ 14, но он должен также работать с C++ 11. Избавьтесь от векторного инициализатора и используйте auto, и он должен работать с C++ 98.

+0

Ничего себе отличный пример. – Kahless

0

Самый эффективный способ, с которым я недавно столкнулся с этим ...

#include<iostream> 
#include<cstring> 
using namespace std; 

int main() 
{ 
int array[10]={1,1,1,1,4,6,4,7,4}; 
int a[100]; 
memset(a,0,sizeof(a)); 
for(int i=0; i<sizeof(array)/sizeof(array[0]); i++) 
{ 
    a[array[i]]++; 
} 
for(int i=1; i<sizeof(a)/sizeof(a[0]); i++) 
{ 
    if(a[i]>0) 
    { 
     cout<<"The number "<<i<<"is repeated "<<a[i]<<" times"<<"\n"; 
    } 

} 

ВЫВОД:

The number 1 is repeated 4 times 
The number 4 is repeated 3 times 
The number 6 is repeated 1 times 
The number 7 is repeated 1 times 
Смежные вопросы