题目描述
有一个长度为n(n<=100)的数列,该数列定义为从2开始的递增有序偶数(公差为2的等差数列),现在要求你按照顺序每m个数求出一个平均值,如果最后不足m个,则以实际数量求平均值。编程输出该平均值序列。
输入
输入数据有多组,每组占一行,包含两个正整数n和m,n和m的含义如上所述。
输出
对于每组输入数据,输出一个平均值序列,每组输出占一行
因为不知道他要输入多少组数据 所以我们需要用java中的 输入判断语句来写个循环 他不等于死循环 嘻嘻嘻嘻
那个判断语句就是 sc.Next() 这个是判定它输入的是否是字符串...写了和没写一样 所以说 它还有其他分支 sc.NextInt() 等等.... 当然第一个( sc.NextInt() ) 是判断输入的是否是 Int 类型。
所以说我们可以用这个形式:
解题代码如下: (非官方答案 自己写的 成功)
请认真看注释!!!!!!
import java.util.*; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); while (in.hasNextInt()) { //首先我们不知道他要输入多少组 所以给它个输入判断 int n = in.nextInt(), m = in.nextInt(); //输入 n 和 m 分别代表 多少个数 和 每多少个数为一小组 类似二维数组 int sum = 0, av = 0; //sum用来累加值 av 用来 累加 累加值 for (int i = 0; i < (n / m); i++) { //循环 n/m 次 即几组 av = 0; //每次循环前让他的累加累加值等于 0 for (int j = 0; j < m; j++) { sum += 2; //!!!!!自评就在这里!!! 你要知道你是要累加全部值 然后用他来求出平均值,所以他是不会变的! av += sum; //每一次累加值 都要累加起来 这就是自己累加的弱点!BUG! } if (i == 0) //这里是打印格式的 自己调整 System.out.printf("%d", av / m); else System.out.printf(" %d", av / m); } if ((n % m) != 0) { //如果n%m不是0 那么就有余,剩下的余就求他们的平均值 av = 0; for (int i = 0; i < (n % m); i++) { //有多少个余 那就循环多少次累加 sum += 2; //累加值 av += sum; //累加值的值 } System.out.println(" " + av / (n % m)); //最后输出!!! } } } }
自评就是累加那里!!!!!!!!!!! 记住了 是累加全部变化的值 也可以去参考 博文“求Sn=a+aa+aaa+…+aa…aaa(有n个a)之值,其中a是一个数字。 例如:2+22+222+2222+22222(n=5),n由键盘输入,而a由程序设定为2。”这个里面就是!!!
细节是 每次循环之前 av 都要清0 !!