Pomysl na selekcje w tablicy

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 :)

0

petla for w petli for?

0

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

0

Robilem petle w petli, ale chyba zle konstruuje ify

0

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

0
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

2

Najgłupsze rozwiązanie brutal force:

   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.

2

W c++

#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

2
#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

0

Dziękuję wszystkim za pomoc ! :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1