-
[algorytm] koło liczb
Siema, znacie może jakiś algorytm na takie zagadnienie:
mamy liczby: 0 1 2 3 4 5
i sobie wyobraźmy, że tworzą one koło. Chcemy poznać wartości bocznych partnerów dla konkretnej cyfry czyli:
np
1 to 0 i 2
2 to 1 i 3
szkopuł w tym, że nie wiem zrobić dla 0 i dla 5?
0 to 5 i 1
5 to 4 i 0
wiem, że można się pobawić w ify dla 0 i 5 ale chcę coś bardziej uniwersalnego (coś mi się kojarzy z instrukcja modulo)
Jest coś takiego?
pomocy ;/
-
Sprawdź, co daje modulo z -1
Mój pomysł to (x-1)%n i (x+1)%n gdzie x to ana liczba, n to liczba maksymalna, teraz nie rozkminię lepiej
-
nie wiem, czy dobrze zrozumiałem, chodzi o coś w tym stylu?
Kod:
int a, b, c;
cin >> a >> b; //w twoim przykładzie a = 0, b = 5
cin >> c; //jej sąsiadów chcesz znać
if(c == 0) cout<<"1, "<<b<<endl;
else if(c == b) cout<<"0, "<<c - 1<<endl;
else cout<<c - 1<<", "<<c + 1<<endl;
druga opcja to lista dwukierunkowa, wtedy znajdujesz w którym miejscu (x) jest podany element i wypisujesz x->poprzedni, x->nastepny. to ma taką przewagę, że możesz tam wrzucić co chcesz w obojętnie jakiej kolejności.
-
Moja metoda nie działa. Cykliczna dwukierunkowa z dodatkowo wskaźnikiem na początek i możliwością obsługi po indeksach będzie najprostsza do wyjęcia wyniku, ale trochę pisania cię czeka
-
Pisanie listy cyklicznej do tak prostego zadania to overkill.
Modulo działające dla ujemnych:
Kod:
int modulo(int a, int b) // a % b
{
while (a < 0)
a += b;
return a % b;
}
W tym konkretnym przypadku (czyli tylko dla -1, nie będzie żadnych dalszych ujemnych) może być nawet uproszczona wersja:
Kod:
int modulo(int a, int b)
{
return a < 0 ? a + b : a % b;
}
-
@up
działa ładnie :*
do zamkniecia