สมมติว่าเรามีฟังก์ชัน rand7 ซึ่งสร้างจำนวนเต็มสุ่มที่สม่ำเสมอในช่วง 1 ถึง 7 เราต้องเขียนฟังก์ชันอื่น rand10 ซึ่งสร้างจำนวนเต็มสุ่มที่สม่ำเสมอในช่วง 1 ถึง 10 เราไม่สามารถใช้ฟังก์ชันไลบรารีบางฟังก์ชันเพื่อสร้างตัวเลขสุ่มได้
สมมติว่าเราต้องการตัวเลขสุ่มสองตัว ดังนั้นจึงอาจเป็น [8,10]
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- rand40 :=40
- ในขณะที่ rand40>=40
- rand40 :=(rand7() - 1) * 7 + (rand7() – 1)
- ส่งคืน rand40 mod 10 + 1
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
ตัวอย่าง
#include <bits/stdc++.h>
using namespace std;
int rand7(){
return 1 + rand() % 7;
}
class Solution {
public:
int rand10() {
int rand40 = 40;
while(rand40 >= 40){
rand40 = (rand7() - 1) * 7 + (rand7() - 1);
}
return rand40 % 10 + 1;
}
};
main(){
srand(time(NULL));
Solution ob;
cout << (ob.rand10()) << endl;
cout << (ob.rand10()) << endl;
cout << (ob.rand10()) << endl;
} อินพุต
Call the function three times
ผลลัพธ์
2 2 6