摘要:常见的音乐随机播放算法主要有两种:一是Shuffle算法;二是Random算法。一Shuffle算法Shuffle算法和排序算法正好相反,是从有序到乱序的一个过程,俗称洗牌算法。它将播放列表中的歌曲顺序打乱,变成一个和原来歌曲顺序没有任何关系的乱序的播放列表,之后进行歌曲的播放,并支持当用户点击“上一首”时,能够回到刚刚播放的那一首歌曲。二Random算法Random算法是在选取即将播放的歌曲时,进行一个随机数的运算,得到即将播放的歌曲在播放列表中的索引,播放列表本身并没有被打乱,只是利用随机函数从播放列表中选取一首歌曲进行播放而已。现在比较普遍的随机数生成算法是基于线性同余算法实现的,例如C
阅读全文
摘要:题目:编写一个单词逆序输出的算法,例如输入“SEE YOU IN ANOTHER LIFE”,要求输出“LIFE ANOTHER IN YOU SEE”。解答:解法一:只需扫描一遍:#include <iostream> void ReverseWord(const char* src, char* dest){ assert(src != NULL && dest != NULL); const char* head = src; //记住头指针 while(*src++); int count = 0; for(src -= 2;;src--) //从尾到头遍历
阅读全文
摘要:全排列问题:设R={r1, r2, …, r3}是要进行排列的n个元素,Ri = R – {ri}。集合X中元素的全排列记为Perm(X)。(ri)Perm(X)表示在全排列Perm(X)的每一个排列前加上前缀ri,得到的排列。因此,R的全排列可以归纳定义如下:1)当n=1时,Perm(R) = (r),其中r是集合R中唯一的元素;2)当n>1时,Perm(R)由:(r1)Perm(R1),(r2)Perm(R2),…,(rn)Perm(Rn)构成。我们据此设计递归算法如下:#include <iostream>/*** 功能描述:交换两个数的值* 参数:* a---数一*
阅读全文
摘要:题目:设有n个正整数,将它们连接成一排,组成一个最小的多位整数?例如:n=2时,2个整数32,321连接成的最小整数是:32132; n=4时,4个整数55,31,312,33连接成的最小整数为:312313355。解答:由于题目涉及到整数的连接,如果直接进行整数的连接,可能会超出整数的表示范围,因此我们将之转换为字符串之间的连接更简单些,同时自定义字符串的比较规则:如果字符串A+B > B+A,那么A>B。同时可以证明A+B>=B+A,B+C>=C+B,则A+C>=C+A。因此,解题思路为:1)先将输入的n个整数转换成字符串;2)按照自定义的字符串比较规则将n个
阅读全文