package com.digitalevers.random.clicks
///模拟点击行为
//给出一个总的点击数量 比如100000点击一天
//然后模拟拆解出随机分布在每分钟内点击数 将其存入一个长度为 24 * 60 的数组中
object ArrayTest {
val unit = 60
val timeLength = 24 /// hours
val baseLimit = 5 //基准极限 进入递归过程的增减幅度
val clicks: Array[Int] = new Array[Int](unit * timeLength)
var totalAmount = 0
def main(args: Array[String]): Unit = {
totalAmount = scala.io.StdIn.readInt()
randomProcess(totalAmount, baseLimit)
printf("" + clicks.sum)
}
def randomProcess(srcData: Int, baseLimit: Int): Unit = {
val perMin = (srcData / (unit * timeLength)).toInt
////////////////////////////
if (perMin <= 0) {
val sliceMount = Math.abs(srcData / baseLimit).toInt
for (i <- 1 to sliceMount) {
val index = util.Random.nextInt(unit * timeLength)
if (srcData < 0) {
//压缩数据 (做出判断防止出现负数)
if ((clicks(index) - baseLimit) >= 0) {
clicks(index) -= baseLimit
}
} else {
//增加数据
clicks(index) += baseLimit
}
}
} else {
for (i <- 0 until (unit * timeLength)) {
clicks(i) = util.Random.nextInt((perMin * 2 + 1))
}
}
///////////////
if (totalAmount != clicks.sum) {
if (totalAmount - clicks.sum > baseLimit || totalAmount - clicks.sum < -baseLimit) {
//继续递归过程
randomProcess(totalAmount - clicks.sum, baseLimit)
} else {
randomProcess(totalAmount - clicks.sum, 1)
}
}
}
/////////end process
}