1、随机数生成
添加链接描述
给你一个能生成1到5随机数的函数,用它写一个函数生成1到7的随机数。 (即:使用函数rand5()来实现函数rand7())
现在给两个生成随机数的函数Randa, Randb。Randa和Randb分别产生1到a的随机数和1到b的随机数,a,b不相等 (相等就没必要做转换了)。现在让你用Randa实现Randb。
1、如果a > b,进入步骤2;否则构造Randa2 = a * (Randa - 1) + Randa, 表示生成1到a2 随机数的函数。如果a2 仍小于b,继教构造 Randa3 = a * (Randa2 - 1) + Randa…直到ak >
b,这时我们得到Randak , 我们记为RandA。
2、步骤1中我们得到了RandA(可能是Randa或Randak ),其中A > b, 我们用下述代码构造Randb:
def roundb():
x = roundA()
while x>b*(A//b):
x = roundA()
return x%b+1
2、数组排序
奇数在前偶数在后
输入一个整数数组,调整数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。
方法一
类似于快速排序的思想,设两个指针从两边开始寻找。但不能保证相对顺序(即奇数和奇数,偶数和偶数之间的相对位置不变)
def f(nums):
left = 0
right= len(nums)-1
while left<right:
while nums[right] & 1 == 0:
right -=1
while nums[left] &1 ==1:
left+=1
if left <right:
nums[left],nums[right] = nums[right],nums[left]
return nums
方法二
插入排序的思想 能保证相对顺序,即奇数和奇数,偶数和偶数之间的相对位置不变
1、题目要求是“调整数组中数字的顺序”,即需要在原有数组上进行操作。
2、定义两个int型变量divP和searchP,divP指向左半段已经排好序的“前奇后偶”数组中最后一个奇数的位置;searchP始终位于divP的右边,指向数组右半段中出现的第一个奇数的位置。
3、定位searchP之后,依次与区间array[divP,searchP]之间的数值进行交换
def reOrderArray( array):
divP = 0
for i in range(len(array)):
if array[i]%2 == 1:
searchP = i
while searchP > divP+1:
array[searchP],array[searchP-1] = array[searchP-1],array[searchP]
searchP -= 1
divP += 1
print(array)
return array