17. oktober 2004 - 13:08
Der er
11 kommentarer og 1 løsning
Random IKKE ENS tal..
Hejsa! Jeg har siddet lidt og rodet med rand() og det går i og for sig godt nok.. Mit problem er bare, at jeg vil gerne have tilfældige tal mellem 1 og 10 som skal smides ind i et array der er 10 langt.. Problemet er bare, at disse tal IKKE må være ens.. Jeg kan ikke helt gennemskue hvordan jeg undersøger dette?! På forhånd tak!
Annonceindlæg fra DE-CIX
Edge computing: behandling ved kilden
Edge computing revolutionerer den måde, data behandles på, ved at bringe kapacitet og ydeevne tættere på dér, hvor der er behov for det.
15. april 2025
17. oktober 2004 - 13:13
#1
Kan du ikke bare tjekke på om tallet allerede findes i arrayet med en if-sætning?
17. oktober 2004 - 13:19
#2
Man kan ikke bare gøre det med int a[10]; bla bla bla random = rand() bla bla bla if(random == a) { dont add to array } else { add to array } ?
17. oktober 2004 - 13:25
#3
du skulle måske lige lave en løkke der kører hele arrayet igennem. for(int i=0; i<10; i++) { int a[10]; int random = rand(); if(a[i] == random) { dont add to array } else { add to array } }
17. oktober 2004 - 13:31
#4
sådan havde jeg også gjort det først, men den tjekker da ikk de tidligere værdier vel? Men kun den aktuelle plads? og jeg vil slet ikk have at værdierne er ens i hele arrayet.. dvs 5 3 8 9 2 6 1 4 7 10 er OK det er den her IKKE 5 5 2 3 4 7 6 9 1 3
17. oktober 2004 - 13:33
#5
Prøv noget a la: #include <iostream> #include <cstdlib> #include <ctime> using namespace std; bool already(int v, int *a, int n) { for(int i=0;i<n;i++) { if(v==a[i]) return true; } return false; } int main() { srand(time(NULL)); int a[10]; for(int i=0;i<10;i++) { do { a[i] = rand() % 10 + 1; } while(already(a[i],a,i)); } for(int i=0;i<10;i++) { cout << a[i] << endl; } return 0; }
17. oktober 2004 - 13:55
#6
#include <iostream> #include <vector> #include <algorithm> #include <stdlib.h> #include <time.h> class RandomClass { public: RandomClass() { srand(time(0)); } int operator()(int aRange) { return int(1.0*aRange*rand()/RAND_MAX); } }; int main() { std::vector<int> Vector; int a; for(a = 1; a <= 10; a++) Vector.push_back(a); RandomClass Rand; std::random_shuffle(Vector.begin(), Vector.end(), Rand); for(a = 0; a < 10; a++) std::cout << Vector[a] << std::endl; return 0; }
17. oktober 2004 - 14:07
#7
Undskyld.. Min fejl! Programmet skal være i ANSI C.. Jeg har ændret lidt på det, til følgende: #include<stdlib.h> #include<stdio.h> #include<time.h> int i; int a[10]; int already(int v, int *a, int n) { for(i=0;i<n;i++) { if(v==a[i]) return 1; } return 0; } void main() { srand(time(NULL)); for(i=0;i<10;i++) { do { a[i] = rand() % 10 + 1; } while(already(a[i],a,i) == 0); } for(i=0;i<10;i++) { printf("%d", a[i]); } } Men jeg må have gjort noget forkert, for det bringer mig bare i en uendelig løkke.. Nogen der har et forslag?
17. oktober 2004 - 14:09
#8
Skal while(already(a[i],a,i) == 0); ikke være while(already(a[i],a,i) != 0);
17. oktober 2004 - 14:11
#9
#include <stdio.h> #include <stdlib.h> #include <time.h> int already(int v, int *a, int n) { int i; for(i=0;i<n;i++) { if(v==a[i]) return 1; } return 0; } int main() { int i,a[10]; srand(time(NULL)); for(i=0;i<10;i++) { do { a[i] = rand() % 10 + 1; } while(already(a[i],a,i)); } for(i=0;i<10;i++) { printf("%d\n",a[i]); } return 0; }
17. oktober 2004 - 14:15
#10
Duh! Jo, selvfølgelig skal den det.. Tak for hjælpen, smid et svar! :)
17. oktober 2004 - 14:39
#11
ok
06. november 2004 - 18:26
#12
Så mangler du bare at acceptere svaret
Kurser inden for grundlæggende programmering