merhaba c++ da mesela 20 ile 50 arasında rastgele birbirinden farklı 10 adet sayı üretmek istiyorum ama ne yaptıysam bir türlü olmadı nasıl birşey yapabilirim örneğin 20 32 43 24 26 29 44 43 33 38 gibi olucak |
C++ BİRBİRİNDEN FARKLI RASTGELE SAYI ?
-
-
boşver kavga çıkıyor
-
dediğin kısımda yaptığın kodları bir gönder bakalım öncequote:
ne yaptıysam bir türlü olmadı -
çok zor soru mu sordum ? -
hocam bakamadım kusura bakmayın şöyle birşey yaptım burda 0 la 10 arası rastgele sayılar yapabildim boyutu kaçsa onla o arasında olan sayılar ama bunu bir türlü aralık haline getiremedim 20 ile 50 arasında 10 adet rastgele sayı gibisinden
#include <iostream>
using namespace std;
#include <locale.h>
#include <ctime>
#include <iostream>
int main()
{
srand(time(0));
const int BOYUT = 10;
int rastgeleSayi;
int dizi[BOYUT] = { 0 };
for (int i = 0; i <= BOYUT - 1; i++)
{
while (true)
{
rastgeleSayi = rand() % 10;
if (dizi[rastgeleSayi] == 0)
{
dizi[rastgeleSayi] = i;
break;
}
}
}
for (int i = 0; i < BOYUT; i++)
{
cout << dizi[i] << endl;
}
return 0;
}
-
hocam birde şey düşündüm rastgele sayı üretmek yerine bir dizi oluşturup for ile dizinin elemanlarını tek tek yazdırsam sonra random_shuffle komutu ile dizinin elemanlarını karıştırıp ilk 10 elemanını felan alsam olabilir mi bunun gibi mi birşey yapmalıyım yada random komutu ile farklı bir yolu varmıdır ?
-
Kod eksik ve hatalı. int dizi[BOYUT] = { 0 }; dediğinde ilk elemana 0 koyar fakat ilk eleman neden 0? Sondaki cout << dizi, cout << dizi i olmalı fakat o çok basit, hatadan saymayalım, ona typo / yazım hatası diyelim.
if (dizi[rastgeleSayi] == 0) kısmında int türünde dizinin endeksine rasgeleSayi koymak ta oldukça radikal bir hata. Ayrıca 20 ve 50 arası kontrol için kullanılacak 20 ve 50 degerlerini göremedim.
bu problemin en direkt çözüm yolu :
20-50 arası ras adında rasgele sayı üret.ras dizinin içinde yoksa diziye ekle, ras dizinin içinde varsa farklı ras ile tekrar (öz) yinele, dizi büyüklüğü boyuta ulaşana kadar bunu (öz) yinele. özyinele => recursion.
ras dizinin içinde yoksa kısmını kolaylıkla yapabilmek için c++11 kullanmalısın. ödevde c++11 değil klasik c++98 kullanmak gibi şart var mı?
random_shuffle kullanarak bahsettiğin çözüm yöntemi bence geçersiz, ona direkt sıfır verebilir hodja :)
< Bu mesaj bu kişi tarafından değiştirildi Tuğkan-0153 -- 6 Nisan 2021; 17:43:38 >
-
c++11 kullanmalısın gibi bir şart yok tamamdır çok teşekkür ederim dediğinizi yapmaya çalışıcam
-
tüyo vereyim mi :)
özyineleme tekniği uygulanmış c++11 çözümü
quote:
#include <iostream>
#include <vector>
#include <algorithm>
#include <time.h>
using namespace std;
vector<int> rasgele (int boyut, int alt, int ust, int rasg, vector<int> liste ) {
if (boyut < 1)
return liste;
else {
if (any_of(liste.begin(), liste.end(),[rasg](int elt) {return rasg == elt;}))
return rasgele(boyut, alt, ust, alt + rand() % (ust-alt+1) , liste);
else {
liste.push_back(rasg);
return rasgele(boyut-1, alt, ust, alt + rand() % (ust-alt+1) , liste); } } }
/* Öz yinelemeli / rekürsif işlev */
int main (int argc, char *argv[]) {
srand (time(NULL));
int boyut = atoi(argv[1]); /* örn 10 */
int alt = atoi(argv[2]); /* örn 20 */
int ust = atoi(argv[3]); /* örn 50 */
vector<int> gecici{};
vector<int> listem = rasgele(boyut, alt, ust, alt + rand() % (ust-alt+1), gecici);
sort( listem.begin(), listem.end() );
cout << "Tekrar etmeyen " << boyut << " rasgele sayı: " ;
for_each(listem.begin(),listem.end(), [](int n){cout << n << ' ';}); }
Not: debug etme amaçlı koyduğum sort orada kalmış, onu kaldırırsan sayıların sırası da rasgele olur.
< Bu mesaj bu kişi tarafından değiştirildi Tuğkan-0153 -- 6 Nisan 2021; 21:15:28 >
-
#include <iostream> #include <stdlib.h> #include <ctime> using namespace std; int main(){ srand(time(NULL)); int num1=20,num2=50; int range=num2-num1; int arr[10]; for(int i=0;i<10;i++){ arr[i] = num1 + rand() % range; for(int j=0;j<10;j++){ if(i==j) continue; if(arr[i]==arr[j]){ i--; break; } } } }
Kod
Yığını:Iterative şekilde yaptım. O(N^2)
Bu mesaj IP'si ile atılan mesajları ara Bu kullanıcının son IP'si ile atılan mesajları ara Bu mesaj IP'si ile kullanıcı ara Bu kullanıcının son IP'si ile kullanıcı ara
KAPAT X