(Java実現)HDOJ 2023平均成績を求める対象設計思想


Problem Description
1つのクラスにn(n<=50)人の学生がいると仮定し、1人当たりm(m<=5)科目を受験し、各学生の平均成績と各科目の平均成績を求め、各科目の成績が平均成績以上の学生数を出力する.
 
Input
入力データには複数のテストインスタンスがあり、各テストインスタンスの最初の行には、学生数とカリキュラム数を表す2つの整数nとmが含まれます.次にn行のデータで、各行にm個の整数(すなわち、試験点数)が含まれる.
 
Output
各テストインスタンスについて、3行のデータを出力し、1行目はn個のデータを含み、n個の学生の平均成績を表し、結果は2桁の小数を保持する.2行目はm個のデータを含み、m科目の平均成績を表し、結果は2桁の小数を保持する.3行目は整数で、このクラスの各科の成績が平均成績に等しい学生の数より大きいことを示しています.
各テストインスタンスの後ろに空の行があります.
 
一、データ構造
Student[] stu = new Student[n];//学生対象配列
double[] avg = new double[m];//各科の平均成績
class Student//学生クラス
double avg;
double[] grade;
}
二、対象に対する解題構想(類属性のパッケージ):
1.n個の学生オブジェクトの配列を作成する
2.1人の生徒の各科の成績を順次読込み、科目成績総和配列にデータを記録し、その生徒の平均成績を算出する
3.生徒数ループによるステップ2の実行
4.科目成績総和配列から各科の平均成績を求める(avg[j]/=n)
5.各科の成績が平均成績以上の学生数を計算する
import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
        while(in.hasNextInt()){
        	int n = in.nextInt();
        	int m = in.nextInt();
        	
        	Student[] stu = new Student[n];  //  n        
        	double[] avg = new double[m];    //       
        	int i,j;
        	int sum,num = 0;
        	
        	for(i = 0; i < n; i++){
        		sum = 0;
        		stu[i] = new Student(m);
        		for(j = 0; j < m; j++){    //             
        			stu[i].grade[j] = in.nextInt(); 
        			sum += stu[i].grade[j];             //            
        			avg[j] += stu[i].grade[j];          //      
        		}
        		stu[i].setAvg(sum*1.0/m);   //          
        	}
        	for(j = 0; j < m; j++){   //         
        		avg[j] /= n;
        	}

        	boolean flag;
        	//                    
        	for(i = 0; i < n; i++){
        		flag = true;
        		for(j = 0; j < m; j++){
        			if(stu[i].grade[j] < avg[j]){
        				flag = false;
        				break;
        			}
        		}
        		//flag true                   
        		if(flag){   
        			num++;
        		}    		
        	}
        	
        	//  ,       ,System.out.printf("%.2f
",a); PE for(i = 0; i < n-1; i++){ System.out.printf("%.2f ",stu[i].avg); } System.out.printf("%.2f",stu[n-1].avg); System.out.println(); for(i = 0; i < m-1; i++){ System.out.printf("%.2f ",avg[i]); } System.out.printf("%.2f",avg[m-1]); System.out.println(); System.out.println(num); System.out.println(); } } //Student public static class Student{ double avg; double[] grade; //Student public Student(int m){ grade = new double[m]; // Student } public void setAvg(double avg){ this.avg = avg; } } }