Pomysl na selekcje w tablicy

Pomysl na selekcje w tablicy
J2
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 17
0

Czesc!
Mam trywialny problem, z ktorym nie moge sobie juz poradzic przeszlo kilka godzin, mianowicie chodzi mi o sposób, algorytm z selekcja wartosci w tablicy.

Mam tablice 10 elementow, w ktorej sa np. wartosci: 1,2,2,1,3,1,6,7,6,10 i teraz chce wypisac te wartosci, ktore wystepuja dokladnie 2 razy.
Kombinuje juz dlugo i nie mam pomyslu dobrego, bylbym wdzieczny jezeli by ktos napisal jak mozna by to zrobic :)

BY
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 16
0

petla for w petli for?

KA
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
  • Postów: 1683
0

może najpierw posortuj sobie wartości w tej tablicy to będzie Ci łatwiej ;)

J2
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 17
0

Robilem petle w petli, ale chyba zle konstruuje ify

BY
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 16
0

nikt tu nie jest jasnowidzem i nie znamy zawartosci twojego kodu. wklej go

J2
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 17
0
Kopiuj
int licznik=0;
	for (int i=0; i<wektor.size(); i++)	
	{
		licznik=0;
		for (int j=0; j<wektor.size(); j++)
		{
				if ( wektor[i] == wektor[j] ) 
				{
					licznik++;
						if (licznik == 2)
					{
						
						cout << "Dwa razy wystepuje liczba:  " << wektor[i] << endl;	
										
					}			
				}
		}
	} 

To bedzie ten fragment, nie jest to tablica, a wektor liczb int, ale zasada jest podoba, no chyba, ze istnieje jakas magiczna funkcja, ktorej nie znam :D

_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: dni
2

Najgłupsze rozwiązanie brutal force:

Kopiuj
   for(size_t i=0;i<wektor.size();++i)    
     {
      int value=wektor[i];
      size_t counter=0;
      for(size_t k=0;(k<i)&&(!counter);++k) if(wektor[k]==value) ++counter;
      if(!counter) // jeżeli nie było tej liczby wcześniej, czyli już na jej temat wszystko powiedziano
        {
         for(size_t k=0;k<wektor.size();++k) if(wektor[k]==value) ++counter;
         if(counter==2) cout<<"Dwa razy wystepuje liczba: "<<value<<endl;
        }
     }

Ale lepiej posortuj jak mówiła wcześniej @karolinaa wtedy kod wychodzi prostszy i szybszy.

n0name_l
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2412
2

W c++

Kopiuj
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main() {
	vector<int> vec = {1, 2, 3, 4, 1, 2, 3, 4, 1, 1, 2, 5, 12, 5};
	sort(vec.begin(), vec.end());
	auto it = vec.begin(), end = vec.end();
	while(it != end) {
		auto tmp_it = find_if_not(it, end, [&](const int value) { return value == *it; });
		if(distance(it, tmp_it) == 2) cout << *it << "\n";
		it = tmp_it;
	}
	return 0;
}

http://ideone.com/AF4Fx8

_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: dni
2
Kopiuj
#include <iostream>
#include <map>
#include <algorithm>
using namespace std;
 
int main()
  {
   int data[]={1, 2, 3, 4, 1, 2, 3, 4, 1, 1, 2, 5, 12, 5};
   map<int,unsigned> tb;
   for(size_t i=0;i<sizeof(data)/sizeof(*data);++i) ++tb[data[i]];
   for(map<int,unsigned>::iterator i=tb.begin();i!=tb.end();++i) if(i->second==2) cout<<i->first<<endl;
   return 0;
  }

http://ideone.com/majmfL

J2
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 17
0

Dziękuję wszystkim za pomoc ! :)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.