移动平均数最简洁的算法
来源:互联网 发布:淘宝达人赚钱 编辑:程序博客网 时间:2024/05/21 11:10
不断地从command line读取数字,要求算最新出现的N个数字的平均数。
这个平均数的值是流动的,例如
* % java RunningAverage 4 * 2.0 4.0 6.0 2.0 2.0 2.0 2.0 3.0 * <ctrl-d> * 3.5 3.5 3.0 2.0 2.25
每次打印最新4个数字的平均数。
最简洁的算法:
import java.util.Scanner;public class RunningAverage {public static void main(String[] args) { Scanner sc = new Scanner(System.in);int N = Integer.parseInt(args[0]);double[] ave = new double[N];double sum = 0.0;for(int i = 1; sc.hasNext(); i++) {sum -= ave[i % N];ave[i % N] = sc.nextDouble();sum += ave[i % N];if(i >= N) System.out.print(sum/N + " ");}}}
几个关键点:
1)设置一个数组来放需要计算平均数的N个数字;这个数组内容是在不断变化的
2)数组最初每个位置都是0,然后把读到的数字一个一个往里面填,填满N个之后,再读新数字时,就需要把最先填进去的那个数挖掉,换成新的数
3)变量sum追踪N个数之和,sum也是流动的,从数组里挖掉旧数字时,也要把它从sum里挖掉
4)什么时候开始计算平均数- 第一次是在当数组填满N个时,就可以求平均数了;以后每读到一个新数字,就“流动”计算一次
5)利用了i 和 N的关系,取模是一种很有用的方式
6)for loop里的条件sc.hasNext()
0 0
- 移动平均数最简洁的算法
- 最简洁的最大公约数算法
- 最简洁的A*算法
- 20151017判断闰年的最简洁算法
- 求平均数的算法
- 移动平均数
- 防止平均数溢出的算法
- 最简洁的广度优先遍历算法模板
- 最清晰简洁的KMP(字符串匹配算法)介绍
- 移动web最简洁的滑动效果Swipe JS(适合初学者)
- 移动web最简洁的滑动效果Swipe JS(适合初学者)
- 一种高效的求平均数的算法
- 最简洁的单链表逆序
- 最简洁的八皇后
- 最大公约数最简洁的方法
- 最完整最简洁的JavaScript基础教程
- 最简洁搭建Symbian os C++移动开发环境
- 4.计算数据的平均数和最值
- C++中的指针
- Codeforces Round #316 (Div. 2) E. Pig and Palindromes dp
- SQL优化一
- el表达式跟ognl表达式的区别(转)
- hdu 4034 Graph Floyd
- 移动平均数最简洁的算法
- format HDD 格式化硬盘 块设备 code
- RegularExpression(Regex)
- 将字符串插入到指定位置
- maven管理SpringMVC+Mybatis无法加载Mapper.xml
- A. Case of the Zeros and Ones(Codeforces Round #310 (Div. 2) 栈)
- android AudioManager类 详解
- oracle卸载
- iOS —— 设备信息获取