2007年5月5日 星期六

《 Java 》Random 排班不機智

題目:



一間公司的倉庫守衛工作時間一天為九小時,一共聘請了六名工,同一時間必須有兩人看守。
試問一人一天的休息時間?

說明:



這是一題國小五年級的數學題目,話說當時看到還霧煞煞勒,此題正解為

總工作時間是 9 * 2 = 18 hours
有六人去分擔這些時間,所以 18/6=3,每人每天必須工作 3 hours
最後每人休息時間是 9-3=6 hours。

原本以為可以去看看如果這六位員工去排班會是怎樣的,所以寫了一些程式碼想要去跑
但是不知道怎樣才會有效率,只用了 Random 然後判斷一直重複猜數字。

RandomArray.java

import java.util.Scanner;
import java.util.Random;

public class RandomArray{
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
System.out.println("Input Rows ans Cols:");
int m = scanner.nextInt();
int n = scanner.nextInt();
boolean play = false;
while(play != true){
Matrix a = new Matrix(m, n);
a.setMatrix();
a.getMatrix();
play = a.check();
}
}
}

##CONTINUE##

class Matrix{
private int value;
private int rows;
private int cols;
private int[][] storage;
Random random = new Random();

public Matrix(){

}

public Matrix(int rows, int cols){
this.rows = rows;
this.cols = cols;
storage = new int[rows][cols];
}

public void randomValue(){
value = random.nextInt(2);
}

public void setMatrix(){
for(int i = 0; i < rows; i++){
for(int j = 0; j < cols; j++){
randomValue();
storage[i][j] = value;
}
}
}

public void getMatrix(){
for(int i = 0; i < rows; i++){
for(int j = 0; j < cols; j++){
System.out.print(storage[i][j] + " ");
}
System.out.println();
}
}

public boolean check(){
int rowsum = 0;
int colsum = 0;

for(int i = 0; i < rows; i++){
for(int j = 0; j < cols; j++){
rowsum += storage[i][j];
}
if(rowsum != 3){
return false;
}
rowsum = 0;
}

for(int i = 0; i < cols; i++){
for(int j = 0; j < rows; j++){
colsum += storage[j][i];
}
if(colsum != 2){
return false;
}
colsum = 0;
}

return true;
}
}

以上我用過一組解去跑是可以判斷正確的,但是改用隨機呢那就...
說說回來這真的很難讓電腦去猜,因為Array[6][9]有54數字,一共有2的54次方種配法,
天啊~要用哪一個方式去改進呢?資料結構有說嗎?哈哈......(啃書去=..=) :)

沒有留言:

張貼留言