Member 13849991 Ответов: 3

Я хочу найти повторяющиеся числа в строку в массив genrated раном. Я не могу сделать дальше этого.


я хочу найти повторяющиеся числа в строке(2 в строке,3 в строке,... ) в случайном генетическом массиве. я не могу сделать это дальше, чем это.
Мой код до сих пор |
|
В

Что я уже пробовал:

#include "stdafx.h"
#include <iostream>
#include <cstring>
#include <ctime>
#include <array>
#include <algorithm>
using namespace std;

int main()
{
	srand(time(NULL));
	
	const int velikostPolja = 50;
	int a[velikostPolja];
	int y = 0;
	int x = 0;

	for (int i = 0; i < velikostPolja; i++)
	{
		a[i] = rand() % 10;
		cout << a[i];	
	}

	cout << endl;
	
	for (int i = 0; i < velikostPolja; i++)
	{		
			if (a[i] == a[i+1])
				x++;		
	}
	
	cout << endl;
	cout << "Dvakrat ponavljajoce stevilke: " << x << endl;

	system("pause");
	return 0;
}

3 Ответов

Рейтинг:
2

KarstenK

Вам нужно две петли для проверки. Первый для элемента и второй для сравниваемого элемента.

for (int i = 0; i < velikostPolja; i++)
{
  for (int n = 0; n < velikostPolja; n++)
  {
    //match found (no self matching)		
    if( (a[i] == a[n]) && ( i != n) ) 
    {

    }
  }
}
Лучше писать все по-английски.


Рейтинг:
1

Rick York

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

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


Member 13849991

спасибо за Ваши советы и помощь.
у меня есть счетчик, когда элемент в массиве совпадает со следующим. я хочу сделать так,чтобы я считал,когда числа повторяются 2x, 3x, 4x...

Rick York

ОК,

if( lastElement == thisElement )
    ++counter;
Вот что для этого нужно. Тогда вам нужно немного больше логики вокруг него сейчас, чтобы сохранить наибольшее значение счетчика, которое видит программа, и сбросить счетчик, когда они не совпадают. Большая часть этой логики пойдет в том случае, когда соседние элементы не совпадают.

Рейтинг:
1

CPallini

Вы могли бы дать шанс стандартной библиотеке (и современному C++):

#include <iostream>
#include <ctime>
#include <cstdlib>
#include <array>
#include <map>
using namespace std;

int main()
{ 
  srand(time(NULL));
  
  constexpr size_t SIZE = 50;
  
  map <int,int> dcm; 
  array <int, SIZE > arr;
  
  for (auto & x : arr)
    x = rand() % 10;

  cout << "array content\n";
  for (const auto & x : arr)
    cout << x << " ";
  cout << "\n";

  for (const auto & x : arr)
    dcm[x]++;
  
  for (const auto & [value, count] : dcm)
    cout << value << " repetitions: " << count << "\n";
}