Autor Wątek: Algorytm poszukiwany!  (Przeczytany 1196 razy)

Offline agencki_tajniak

  • Użytkownik

# Wrzesień 01, 2010, 19:47:13
Witam, szukam jakiegoś algorytmu który spełniał by następujące zadanie:
Z liczb które bym mu podał, tworzył by liczbę, której za jego pomocą nie da się uzyskać żadną inna sekwencją liczb. Podam taki przykład żeby wiadomo było o co mniej więcej chodzi. Jeśli mam 2 liczby: "2" i "5", to jeśli je dodam to dostanę "7", jednak 2 inne liczby np. "4" i "3", też dają 7. No i mi chodzi, żeby jak bym podał taką "2" i taką "5" to bym w zamian dostał taką liczbę, której bym nie dostał podając jakiekolwiek inne liczby, nawet podając te same w odwrotnej kolejności. Oczywiście chodzi mi o więcej niż dwie liczby. Nie wiem czy takie coś jest, czy nie ma, w każdym razie sam nie znalazłem. Tak w sumie to nie mam zamiaru używać jakichś ogromnych liczb, więc coś takiego co np. działało by tylko na liczbach z przedziału <0;100> w zupełności by wystarczyło.

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline DoomsdayNow

  • Użytkownik

# Wrzesień 01, 2010, 19:50:44
x_0 + 101*x_1 + (101^2)*x_2+ ... + (101^n)*x_n

Offline raver

  • Użytkownik
    • Moja strona domowa.

# Wrzesień 01, 2010, 20:00:07
#include <iostream>
#include <set>

int sekw(int a, int b)
{
return a*a*12345 + b*b*b*79801;
}

int main()
{
std::set<int> res;
for(int i=0; i<100; i++)
{
for(int j=0; j<100; j++)
{
if(j!=i)
{
if(res.count(sekw(i, j)))
std::cout << "Jakis wynik sie powtorzyl\n";
else res.insert(sekw(i, j));
}
}
}
}

O to chodziło?

Offline agencki_tajniak

  • Użytkownik

# Wrzesień 01, 2010, 20:11:16
No! Chyba właśnie o takie bajery mi chodziło, tylko jakby dało się zmniejszyć wynik np. dzieląc go przez 100 czy coś takiego, wystrzegając się przy tym ułamków.

Offline raver

  • Użytkownik
    • Moja strona domowa.

# Wrzesień 01, 2010, 20:37:49
Mój 2gi pomysł: zadeklaruj sobie tablicę 2D:
short tab[101][101]
I potem dla każdej liczby od 0 do 101*101 wyznacz inną komórkę. 5 minut kodzenia.

Offline agencki_tajniak

  • Użytkownik

# Wrzesień 01, 2010, 20:43:45
Kurcze masz rację! Czemu sam o tym wcześniej nie pomyślałem...(?) Jak zwykle szukając skomplikowanego rozwiązania, nie zauważyłem tego oczywistego. Dzięki wielkie. :)

Offline mach12

  • Użytkownik
    • www.mach12.pl

# Wrzesień 01, 2010, 23:01:44
Przy kilku liczbach to raczej nie unikniesz dużych wyników. Ilość możliwych wyników to Vn101 co w przybliżeniu (dość sporym :P ale ważny jest rząd) 100^n, gdzie n to ilość liczb. Tak więc dla 5 liczb masz ok 10mld wyników (9,5mld konkretnie).

Offline Radarek

  • Użytkownik

# Wrzesień 02, 2010, 10:50:56
Jeśli nie potrzebujesz odwikłania tej zmapowanej liczby na liczby z których powastała ta wartość to możesz użyć jakiś algorytm hashujący, np. sha1. Przykładowo dla liczb 3 i 5 liczysz hash sha1("3-4") (separator potrzebny by była jednoznaczność).