[ invazija @ 08.10.2007. 22:36 ] @
| poz... ovako imam neki program, koji iznacuje random brojeve od 0-10. sad ne mogu nikako da realizujem da mi ne ponavlja vec izbacene brojeve, i kako sta da izmenim da mi izbacuje brojeve od 1-10, tj bez nule...
kod:
Code:
#include<stdio.h>
#include<stdlib.h>
main(){
int n,a[10],i,j,b;
for(;;){
printf("\n duzina niza (max 10)");
scanf("%d",&n);
if(n<=0 || n>dim) break;
printf("\n pocetni niz");
for(i=0; i<n; i++)
printf("%d%c", a[i]=rand()/((double)RAND_MAX+1)*10, (i%30==29 || i==n-1)?('\n'):(' '));
for(i=0; i<n-1; i++)
for(j=i+1;j<n;j++)
if(a[i]>a[j]) b=a[i], a[i]=a[j], a[j]=b;
printf("\n sortirani niz");
for(i=0;i<n;i++)
printf("%d%c",a[i], (i%30==29 || i==n-1)?('\n'):(' '));
}}
ako bi mogla neka brza pomoc )
[Ovu poruku je menjao invazija dana 09.10.2007. u 00:07 GMT+1]
EDIT: X Files : Molim Vas da zbog preglednosti, kod upisujete između tag-ova predviđenih za to:
[code]
int main ( int argc, char *argv[] )
{
// ...
return 0;
}
[/code]
Tako uokviren (formatizovan) kod će se videti ovako:
Code:
int main ( int argc, char *argv[] )
{
// ...
return 0;
}
EDIT2: Sem u tvom slučaju
[Ovu poruku je menjao X Files dana 09.10.2007. u 07:28 GMT+1]
[Ovu poruku je menjao X Files dana 09.10.2007. u 07:30 GMT+1] |
[ vilyu @ 09.10.2007. 07:45 ] @
S obzirom na to da se radi o malom opsegu, moguce je i resenje koje obezbedjuje da sigurno ne dobijes dvaput isti broj. Prvi put zamislis broj od 1 do 10 i zapamtis ga. Sledeci put trazis random broj od 1 do 9 i on ti predstavlja poziciju zeljenog broja u nizu slobodnih mesta.
Npr. prvi put si zamislio broj 2. Sledeci put zamislis broj 3. Postavis brojac na 0. Onda krenes u neku petlju i kazes: pozicija 1 je slobodna, inkrementiras brojac, pozicija 2 je zauzeta, nastavis u novi ciklus, pozicija 3 je slobodna, inkrementiras brojac, pozicija 4 je slobodna, inkrementiras brojac. E sada je brojac isti kao i zamisljen broj, a ti si na poziciji 4. E to je broj koji si zamislio. Kasnije samo ima vise popunjenih brojeva, ali nikada nemas ponavljanje vec zamisljenog.
[ laserjat @ 09.10.2007. 22:41 ] @
Sa ovim kodom ti ne ponavlja brojeve ;) ako si na to mislio
Code:
for(i=0; i<n-1; i++)
if(a[i+1]==a[i]) {
for(j=i+1;j<n-1;j++)
a[j]=a[j+1];
n--;
i--;
}
[ Mali Misha @ 11.10.2007. 07:23 ] @
Tebi u stvari treba slučajna permutacija brojeva 1-10. Evo jedne ideje (vidi attachment).
Algoritam počinje od jednog niza, i pri svakom sledećem pozivu proklazi kroz njega zamenjujući mesta trenutnom i slučajno izabranom elementu. Ideja se može dalje razraditi.
[ invazija @ 15.10.2007. 15:27 ] @
hvala vam.. iskoristio sam
Code:
for(i=0; i<n-1; i++)
if(a[i+1]==a[i]) {
for(j=i+1;j<n-1;j++)
a[j]=a[j+1];
n--;
i--;
}
@ Mali Misha, hvala ti na ideji ali jos ne razumem taj program :(((
[ Mali Misha @ 15.10.2007. 19:32 ] @
Citat:
invazija: ali jos ne razumem taj program
A da li razumeš pojam
permutacije?
U startu imaš svih 10 brojeva i samo ih mešaš, mešaš.. na slučajan način.
Copyright (C) 2001-2024 by www.elitesecurity.org. All rights reserved.