---
tags: Cmoney_Java題目
---
Java_Cmoney_ft8108
===


1.需要的 function 和 Class
---
1.1 玩家 Class
---
1. attributes : seat, win, score
2. print()
```java=
class Dice {
int seat;
int win;
int score;
Dice(int seat, int win, int score) {
this.seat = seat;
this.win = win;
this.score = score;
}
void print() {
System.out.println(this.win);
}
}
```
1.2 交換 function
---
```java=
public static void swap(Dice[] dices, int i1, int i2) {
Dice tmp = dices[i1];
dices[i1] = dices[i2];
dices[i2] = tmp;
}
```
1.3 分數排序(泡沫排序法)
---
外層迴圈代表要幾個泡泡才能排完(n - 1),
內層代表每一個泡泡要比幾次大小才能排完(n - 1),
可是每當泡泡排好就不用管他了,所以第 i 圈就可以少交換 i次,
因為有 i 個泡泡被固定了,所以(n - i - 1)。
```java=
public static void sortScore(Dice[] dices) {
for (int i = 0; i < dices.length - 1; i++)
for (int j = 0; j < dices.length - i - 1; j++) {
if (dices[j].score > dices[j + 1].score)
swap(dices, j, j + 1);
}
}
```
1.4 座號排序(泡沫排序法)
---
```java=
public static void sortSeat(Dice[] dices) {
for (int i = 0; i < dices.length - 1; i++)
for (int j = 0; j < dices.length - i - 1; j++) {
if (dices[j].seat > dices[j + 1].seat )
swap(dices, j, j + 1);
}
}
```
2.主程式
---
1. 先建立有幾個玩家類別陣列,再用迴圈建構子
2. 要玩幾局的迴圈
1. 迴圈輸入玩家分數
2. 以分數排序
3. 如果分數和最後一個一樣(代表最大),win++
4. ==以位置排序,這樣陣列裡的順序才會對,
下次加分數進去,才不會加錯人,重要!!!!!!!!!!!!!!!!!!!==
3. 最後將結果印出
```java=
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Dice[] dices = new Dice[sc.nextInt()];
for (int i = 0; i < dices.length; i++) {
dices[i] = new Dice(i, 0, 0);
}
int n = sc.nextInt();
for (int i = 0; i < n; i++) {
for (int j = 0; j < dices.length; j++) {
dices[j].score = sc.nextInt();
}
sortScore(dices);
for (int j = 0; j < dices.length; j++) {
if (dices[j].score == dices[dices.length - 1].score)
dices[j].win++;
}
sortSeat(dices);
}
for (int j = 0; j < dices.length; j++) {
dices[j].print();
}
}
```
3.完整程式
---
```java=
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Dice[] dices = new Dice[sc.nextInt()];
for (int i = 0; i < dices.length; i++) {
dices[i] = new Dice(i, 0, 0);
}
int n = sc.nextInt();
for (int i = 0; i < n; i++) {
for (int j = 0; j < dices.length; j++) {
dices[j].score = sc.nextInt();
}
sortScore(dices);
for (int j = 0; j < dices.length; j++) {
if (dices[j].score == dices[dices.length - 1].score)
dices[j].win++;
}
sortSeat(dices);
}
for (int j = 0; j < dices.length; j++) {
dices[j].print();
}
}
public static void sortScore(Dice[] dices) {
for (int i = 0; i < dices.length - 1; i++)
for (int j = 0; j < dices.length - i - 1; j++) {
if (dices[j].score > dices[j + 1].score)
swap(dices, j, j + 1);
}
}
public static void sortSeat(Dice[] dices) {
for (int i = 0; i < dices.length - 1; i++)
for (int j = 0; j < dices.length - i - 1; j++) {
if (dices[j].seat > dices[j + 1].seat )
swap(dices, j, j + 1);
}
}
public static void swap(Dice[] dices, int i1, int i2) {
Dice tmp = dices[i1];
dices[i1] = dices[i2];
dices[i2] = tmp;
}
}
class Dice {
int seat;
int win;
int score;
Dice(int seat, int win, int score) {
this.seat = seat;
this.win = win;
this.score = score;
}
void print() {
System.out.println(this.win);
}
}
```