1. 程式人生 > >已知random7求random10

已知random7求random10

頭條一面 ,其實之前是看過的,宇宙條問的太太太難了QAQ

這樣想

random7()返回的1,2,3,4,5,6,7

經過加減乘除這類的運算至少應該是擴充到比10大的資料範圍,才能進行取模運算

那麼應該想到7*(random7()-1)+random7() 可以擴充到1-49而且是等概率的

比49小的最大的能被10整除的是40,那麼大於40的就捨棄

int random7(){
    return rand()%7+1;
}
int random10(){
    int x=49;
    while(x>40){
        x=random7()*(random7()-1)+random7();
    }
    return x%10+1;
}

擴充套件一下 如果是求random9呢

一樣的哦,大於45的就捨棄了唄

int random9(){
    int x= 49;
    while(x>45){
        x=random7()*(random7()-1)+random7();
    }
    return x%9+1;
}