Zgodnie z prośbą Maćka tutaj jest to, co robiliśmy na piwie ;)
Idea taka, że mamy N monet, jedna ma inną masę, no i co dalej? Wpisujemy do programu ważenia, np. ważymy monety 1,3,5 i 2,4,6 na
drugiej szalce, oraz wynik ważenia, potem dokonujemy jakichś działań na zbiorach i w magiczny sposób wychodzi nam która moneta
jest "inna" ;)
Jak widać kod jest długi i nieco skomplikowany, jeśli ktoś by mógł, to prosiłbym o wrzucenie tutaj kodu ze strukturą, bo osobiście go
napisałem (jak zresztą widać) tworząc klasę, co dla słabszych osób będzie trudniejsze do zrozumienia. Kod by Maciek "crezax", u mnie przynajmniej
się kompiluje.
Co do słabszych osób, które mają ambicję, nie przerażajcie się pierdółkami typu "&x", czy "struct" "class", bo to naprawdę można wytłumaczyć
w 5 minut ;)
Co do samej idei tego kodu i tego jak on działa… no cóż, za dużo by tu pisać, ale można samemu przejrzeć (ale z całym szacunkiem wątpie,
czy ktoś da rade dojść do tego, co ten kod robi), albo podejść w czasie lekcji/po lekcjach do kogoś, kto na piwie był(nie mam nic
przeciwko temu, żebym to był ja, zwłaszcza uwaga do płci pięknej :P ), i myśle, że w ten sposób tłumaczenie ma sens
#include <iostream> using namespace std; const int M=100; class set { bool tab[M+1]; int size; public: void pusty() { size=0; for (int i=1; i<=M; i++) tab[i]=0; } void wypisz() const { for (int i=1; i<=M; i++) if (tab[i]) cout << i << " "; cout << endl; } void dodaj(const int &x) { if (!tab[x]) { tab[x]=1; size++; } } void usun(const int &x) { if (tab[x]) { tab[x]=0; size--; } } void operator+=(const set &a) { for (int i=1; i<=M; i++) if (a.tab[i]) dodaj(i); } void operator-=(const set &a) { for (int i=1; i<=M; i++) if (tab[i] && a.tab[i]) usun(i); } void operator*=(const set &a) { for (int i=1; i<=M; i++) if (tab[i] && !a.tab[i]) dodaj(i); } int ile() { return size; } set() { pusty(); } }; int main() { int N, K, m; set wszystkie, lzejsze, ciezsze, dobre; for (int i=1; i<=M; i++) wszystkie.dodaj(i); cin >> N >> K; for (int i=1; i<=K; i++) { set lewa, prawa; char s; cin >> s >> m; for (int j=1; j<=M; j++) { int x; cin >> x; lewa.dodaj(x); } for (int j=1; j<=M; j++) { int x; cin >> x; prawa.dodaj(x); } if (s=='=') { dobre+=lewa; dobre+=prawa; } else if (s=='<') { lzejsze*=lewa; ciezsze*=prawa; } else { ciezsze*=lewa; lzejsze*=prawa; } } wszystkie-=dobre; if (wszystkie.ile()==1) wszystkie.wypisz(); else if (lzejsze.ile()==1) lzejsze.wypisz(); else ciezsze.wypisz(); }