題目描述
有一個長度為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 !!