Autor Wątek: Wypisanie liczb losowo,bez liczb roznych o jeden i bez powtarzania.  (Przeczytany 1833 razy)

Offline _user

  • Użytkownik

# Sierpień 11, 2015, 00:46:51
Czesc

Chce napisac program do ktorego podajemy na wejscie jakas wybrana liczbe i nastepnie program wypisuje wszystlie liczby z niej 1,2,3,4,5,....n tylko ze nie po kolei, zadna kolejna liczba nie moze miec obok siebie sasiada, nie moze miec obok siebie drugiej liczby roznej o 1 od niej,i zadna nie moze sie powtorzyc, nie do konca wiem jak sprawdzac czy sie nie powtarza, narazie napisalem cos takiego:
Kod: (c) [Zaznacz]
#include<stdio.h>
#include<stdlib.h>
#include<time.h>

int main(void){
  srand(time(NULL));
  int a=0,b=0,n=0;
  scanf("%i",&n);
  int *tab=malloc(n*sizeof(int));
  for(int i=0;i<n;){
    a=(rand()%n+1)+0;
    while(tab[i]!=a){
      a=(rand()%n+1)+0;
    }
    if((b-a)>1){
      printf("%i",a);
      ++i;
      tab[i]=a;
}
    b=a;
  }
  return 0;
}
Ale niezbytnio to dziala ;p

Offline Mr. Spam

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

Offline wozix

  • Użytkownik

  • +4
# Sierpień 11, 2015, 11:06:55
Formatuj kod.

Offline Patrulek

  • Użytkownik

# Sierpień 11, 2015, 13:09:31
Możesz wypisać najpierw liczby nieparzyste, później parzyste aż do tej liczby. Będą nie po kolei, nie będą się powtarzać i różnica każdej z sąsiednich nie będzie równa 1.

Offline _user

  • Użytkownik

# Sierpień 11, 2015, 17:51:21
Tak moge, ale nie chce isc tak na latwizne, chcialbym zeby wypisywalo losowo, moglby ktos z tym pomoc ?

Offline Oti

  • Użytkownik

# Sierpień 11, 2015, 18:39:28
Tak moge, ale nie chce isc tak na latwizne, chcialbym zeby wypisywalo losowo, moglby ktos z tym pomoc ?
Co to za zadanie? Jak założeniem jest to, by różnica między sąsiednimi elementami była większa od 1, to faktycznie najpierw bym wypisał nieparzyste, potem parzyste. Jak dodatkowo chcesz losowo, to te dwa podzbiory możesz jeszcze N razy sobie pozamieniać parami.

Offline _user

  • Użytkownik

# Sierpień 11, 2015, 18:44:47
http://pl.spoj.com/problems/NIEKOLEJ/
 to zadanie, no rozumiem, ale nie da sie tak zeby zupelnie losowo ? bez
wyciagania parzystych i nieparzystych tylko zwyczajnie losowo ? Pozatym nie rozumiem jak wyciagac nieparzyste potem parzyste potem to zamieniac jakos, nie tam nie umiem tego zrobic, wolalbym zwyczajnie losowo, tylko nie wiem jak sprawdzac czy dana liczba juz nie padla wczesniej
« Ostatnia zmiana: Sierpień 11, 2015, 18:50:26 wysłana przez _user »

Offline Kos

  • Użytkownik
    • kos.gd

  • +3
# Sierpień 11, 2015, 18:53:32
- Weź wektor przetasowanych liczb
- Weź drugi pusty wektor, zbieraj do niego kolejne liczby z pierwszego, ale omijaj te które różnią się o 1 od poprzedniej, powtarzaj do skutku
- Może się w tym podejściu okazać że zostanie jedna lub dwie liczby których nie możesz dołożyć na koniec wektora - wtedy trzeba pokombinować :P
- (a) Jeżeli jest jedna -> jeśli nie można dodać na koniec, to można ją zawsze dodać na pierwsze albo trzecie miejsce,
- (b) Jeżeli są dwie -> wywalasz ostatnią i wstawiasz te dwie (zauważ że zawsze można), dalej patrz "jeżeli jest jedna"

Wyjaśnienie (a) i (b) zostawię jako ćwiczenie dla czytelnika :-)
« Ostatnia zmiana: Sierpień 11, 2015, 18:56:41 wysłana przez Kos »

Offline _user

  • Użytkownik

# Sierpień 11, 2015, 18:57:46
Kos te przetasowane liczby i wektory to z c++, a ja pisze w c. Mysle ze wiem jak to zrobic ale niech ktos mi powie, mam liczby w tablicy, jak teraz pomieszac ta tablice ?
« Ostatnia zmiana: Sierpień 11, 2015, 19:06:17 wysłana przez _user »

Offline Kos

  • Użytkownik
    • kos.gd

  • +1
# Sierpień 11, 2015, 19:06:28

Offline _user

  • Użytkownik

# Sierpień 11, 2015, 19:09:48
Albo dobra, skorzystam z rozwiazania otiego :)
« Ostatnia zmiana: Sierpień 11, 2015, 19:26:45 wysłana przez _user »