阿摩線上測驗 登入

申論題資訊

試卷:95年 - 095年高等三級暨普通資訊處理(普考)#32453
科目:程式設計
年份:95年
排序:0

申論題內容

三、假設已存在一實數亂數函數 float random ( )可以傳回一大於等於零且小於 1 的實數 (亦即 0 <= random ( ) < 1)。利用此函數,請撰寫另一函數 int RND (int m, int n)可以 傳回一介於 m~n 之間的整數亂數(亦即 m <=RND (m,n) <= n)。(15 分) 例如:int k = RND (10,20); 則傳回之整數亂數必介於 10~20 之間

詳解 (共 1 筆)

詳解 提供者:hchungw
利用基本的random()函數來生成一個範圍在[m, n]之間的隨機整數。這可以通過先生成一個[0, 1)範圍內的浮點數,然後將這個浮點數擴展到[m, n]範圍的整數。下面是一個使用C++實現的示例:
cpp
Copy code
#include <iostream>
using namespace std;
// 假設的 random() 函數
float random() {
    // 這裡應該是隨機數生成的實現,但為了示例,我們只返回固定的值
    // 在實際應用中,這會返回一個[0, 1)範圍內的浮點數
    return 0.5; // 僅作為示例
}
// RND 函數,返回一個[m, n]範圍內的隨機整數
int RND(int m, int n) {
    // 使用 random() 生成[0, 1)範圍的浮點數,然後擴展到[m, n]範圍
    return m + static_cast<int>(random() * (n - m + 1));
}
int main() {
    // 測試 RND 函數
    int k = RND(10, 20);
    cout << "Random number between 10 and 20: " << k << endl;
    return 0;
}
這段代碼中,RND函數首先調用random()函數獲取一個[0, 1)範圍內的浮點數。然後,這個浮點數被擴展到[m, n]範圍內的一個值。static_cast<int>()用於將浮點數轉換成整數。因為random() * (n - m + 1)生成的是一個[0, n-m+1)範圍內的浮點數,加上m後的範圍就變成了[m, n+1),最後通過轉換成整數,範圍變為[m, n]。