天天看點

Java-解決這個累加問題 -- 自評

題目描述

有一個長度為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 !!