题目描述:

假设张三的mp3里有1000首歌,现在希望设计一种随机演算法来随机播放。

与普通随机模式不同的是,张三希望每首歌被随机到的概率是与一首歌的豆瓣评分(0~10分)成正比的,如朴树的《平凡之路》评分为8.9分,逃跑计划的《夜空中最亮的星》评分为9.5分,则希望听《平凡之路》的概率与《夜空中最亮的星》的概率比为89:95。

现在我们已知这1000首歌的豆瓣评分:

(1)请设计一种随机演算法来满足张三的需求。(2)写代码实现自己的演算法。

分析与解法:

#include
#include
#include
using namespace std;

int findIdx(double songs[],int n,double rnd){
int left=0;
int right=n-1;
int mid;
while(left<=right){
mid=(left+right)/2;
if((songs[mid-1]<=rnd) && (songs[mid]>=rnd))
return mid;
if(songs[mid]>rnd)
right=mid-1;
else
left=mid+1;
}
// return mid;
}

int randomPlaySong(double sum_scores[],int n){
double mx=sum_scores[n-1];
double rnd= rand()*mx/(double)(RAND_MAX);
return findIdx(sum_scores,n,rnd);
}

int main()
{
srand(time(0));
double scores[]={5.5,6.5,4.5,8.5,9.5,7.5,3.5,5.0,8.0,2.0};
int n=sizeof(scores)/sizeof(scores[0]);
double sum_scores[n];
sum_scores[0]=scores[0];

for(int i=1;i

更多面试题,请微信搜「七月在线实验室」

毕业季福利

原价800元的Python入门课程

现在限时免费!没有任何要求,直接领取就可以!

任何疑问,教师团队随时解答

虽然是免费课,但教师团队可没有缩水,依旧是BAT高级专家配合顶级高校硕士进行教学。

立刻微信搜索公众号「七月在线实验室

回复「Python」开始学习

划分为授课时间以及自由提问答疑阶段,每节课都特意留下练习题,让大家去实践,以此辅助大家去消化所学知识。

我们始终相信,只听不用,一辈子也学不会,只有手把手协助大家去实践,才能真的学会东西。

每天更新干货,帮你踏入AI领域成为技术leader。

应届生学员转行拿到52万年薪,大量学员转行后拿到30-40万年薪!

讲师均由各大公司技术leader和国内外顶级高校博士组成!

马上开始学习,和「前辈们」一样进入心仪公司,夺取高薪,成为人生赢家。

也许你面试时的考官就是七月在线的讲师/学员!


推荐阅读:
相关文章