Lab6-ModeMajority


5531026321  นายธนภูมิ พึ่งชัยชาญ (COM22000) (1/9/2013 (11:27:29 AM))

MiniQuiz + TestScript
JLab>javac Utils.java
JLab>
JLab>java Selftest 

JLab> 1. count    : ok ok ok ok ok  (5.0/5.0)
JLab> 2. mode     : ok ok ok ok ok  (5.0/5.0)
JLab> 3. majority : ok ok ok ok ok  (5.0/5.0)
JLab> : -----------------------------
JLab> : ?????? 15.0 ????? (???? 15.0)
JLab> : -----------------------------
JLab> :<POINT>15.0</POINT> (<TOTAL>15.0</TOTAL> )
JLab>

ได้ 15 คะแนน
Source Code

public class Utils {
  //------------------------------------------------------------
  // คืนจำนวนข้อมูลในอาเรย์ d ที่มีค่าเท่ากับ x เช่น
  // ให้ d = [ 2, 3, 4, 4, 5, 5, 4 ], x = 4
  // เมื่อเรียก count(d,x) จะได้ 3 เพราะมี 4 ปรากฏใน d อยู่ 3 ตัว
  public static int count(int[] d, int x) {
    int c = 0;
    for (int i = 0; i < d.length; i++) {
      if (d[i] == x) c++;
      }
   

    return c;
  }
  //------------------------------------------------------------
  // คืนข้อมูลในอาเรย์ d ที่ปรากฏเป็นจำนวนมากสุด เช่น
  // ให้ d = [1, 3, 3, 1, 2, 3, 9, 3, 3]
  // เมื่อเรียก mode(d) จะได้ 3 เพราะ 3 ปรากฏใน d เป็นจำนวน 5 ตัว ซึ่งเป็นจำนวนมากสุด
  // หมายเหตุ : ถ้ามีข้อมูลใน d เกินหนึ่งตัวที่ปรากฏมากสุดเป็นจำนวนเท่ากัน จะคืนตัวใดก็ได้
  //         และให้ถือว่าอาเรย์ d ที่ได้รับมีขนาดอย่างน้อย 1 ช่อง
  public static int mode(int[] d) {
    int[] c = new int[d.length];
    for (int i = 0;i<d.length;i++) {
      for (int j = 0; j <= i; j++) {
        if (d[i] == d[j]) c[i]++;
        }
       
      }
    int max = 0;
    for (int i = 0; i < c.length; i++) {
      if (c[i] >= c[max]) max = i;
      }
    

    return d[max];
  }
  //------------------------------------------------------------
  // ถามว่ามีข้อมูลใดในอาเรย์ d หรือไม่ ที่มีค่าซ้ำ ๆ กันเป็นจำนวนเกินครึ่งของขนาดอาเรย์ เช่น
  // ให้ d = [1,0,1,2,1,1,1,1,1,2]
  // เมื่อเรียก majority(d) จะคืนค่า true
  // แต่ถ้า d = [1,1,1,2,2,3]
  // เมื่อเรียก majority(d) จะคืนค่า false เพราะไม่มีข้อมูลใดใน d ที่มีค่าซ้ำกันเกิน 3 ตัว
  public static boolean majority(int[] d) {
    int[] c = new int[d.length];
    for (int i = d.length - 1; i > 0; i--) {
      for (int j = 0; j < i; j++) {
        if (d[i] == d[j]) c[i]++;
        }
      }
    boolean check = false;
    for (int i = 0; i < c.length; i++) {
      if(c[i] >= (d.length/2)) check = true;
      }
   


    return check;
  }
  //------------------------------------------------------------
  // ถ้าต้องการเขียนเมท็อด main เพื่อทดสอบการทำงานของเมท็อดต่่าง ๆ ก็เขียนเพิ่มได้ที่บริเวณนี้


  //------------------------------------------------------------
}
SM=0, CM=34, ST=38, KY=858, TR=60:00
ERR = 60:00 ;
ERR = 60:00 ;
ERR = 60:00 ;
ERR = 60:00 ;
ERR = 60:00 ;
ERR = 60:00 ;
ERR = 60:00 ;
ERR = 60:00 ;
ERR = 60:00 ;
ERR = 60:00 ;
ERR = 60:00 ;
ERR = 60:00 ;
ERR = 60:00 ;
ERR = 60:00 ;
ERR = 60:00 ;
ERR = 60:00 ;
ERR = 60:00 ;
ERR = 60:00 ;
ERR = 60:00 ;
ERR = 60:00 ;
ERR = 60:00 ;
ERR = 60:00 ;
ERR = 60:00 ;
ERR = 60:00 ;
ERR = 60:00 ;
ERR = 60:00 ;
ERR = 60:00 ;
ERR = 60:00 ;
ERR = 60:00 ;
ERR = 60:00 ;
ERR = 60:00 ;
ERR = 60:00 ;
ERR = 60:00 ;
ERR = 60:00 ;