最新節能省碳設計(?)
================================================
話說在去年因為人數太多而決定放寬過的標準
讓JAVA的人數再度正常了起來
(雖然還是四代同堂)
(而且有一個還是因為機車壞了沒來考試被當,虧我罩他那麼多(?))
不過還是感覺一年比一年輕鬆,那我們當年到底為啥會那麼慘烈阿囧
(修48過2)
消失的(?)上機考再度歸來,不過卻事先把題目說出來了XD
無限位數運算(應該)
N*N魔術方陣
猜數字(我相信很多人不知道老師指的是逆猜數字)
程式有時間寫來玩玩
(前提要我有時間回來看看這裡(炸))
以下是我當年的考題備份(遙遠的境界阿,把程式寫到錯誤會越改越多,然後在慢慢消除,難怪一考就是8小時...)
題目:
物件導向程式語言 考題
注意事項:
*本試卷包含兩大題,每題最高 120 分,各題皆代表一次考試,獨立計分。
*請將各大題中的每一小題之程式獨立存成一個檔案,並依照 s(學號)(大題標號)(小題標號).java
之規則設定檔名。例如:學號=9458000、第 I 大題、第 2 小題 --> s9458000I2.java。
*除課程教科書外,不可參考其他資料、互相討論或上網搜尋,違者以作弊論處。
*可一次一大題,或兩題一起,請監試助教測試程式之正確性,並立刻登記分數。
分數登記後即不得要求更正或更新。
*考試結束時間:下午4:30(預定)
I. 1-2必須依序完成, 3-5不需依照順序,可選會寫的來做。
1.(20分) 請更正 t1.java 中之錯誤,使之能通過編譯。
2.(30分) 請修改 (1) 之程式,使之能正確計算 n^2 (n是整數,1<n<LONG_MAX)。
3.(20分) 請修改 (2) 之程式,使之能計算 n^t (n、t是整數, 1<n<LONG_MAX, 1<t<INT_MAX)
4.(20分) 請修改 (2) 之程式,使之能計算 f^2 (f是 float 型態, 1<f<FLOAT_MAX)
5.(20分) 請修改 (4) 之程式,使之能計算 f^t (f、t 的型態與範圍與3、4小題相同)
特別加分:於下列時間前結束本題,且至少完成 3、4或5 小題之一(或多題),並經助教確認正確者。
1.(10分) 下午 1:30 前。
2.(5分) 下午 3:30 前。
II. 1-2必須依序完成, 3-5不需依照順序,可選會寫的來做。
1.(20分) 請更正 t2.java 中之錯誤,使之能通過編譯。
2.(30分) 請修改 (1) 之程式,使之能接受整數輸入值,並正確完成 radix sort (msd)
輸出由小至大排序結果。
3.(10分) 改寫 (2) 之程式,使之能輸出由大至小排序結果。
4.(20分) 改寫 (2) 之程式,使之能處理浮點數 (float型態) 之排序(小至大)。
5.(30分) 改寫 (2) 之程式為 radix sort (lsd)。
特別加分:於下列時間前結束本題,且至少完成 4或5 小題之一(或全部),並經助教確認正確者。
1.(10分) 下午 1:30 前。
2.(5分) 下午 3:30 前。
程式t1:
public class t1
int[] squareOf(long n) {
int[] orig = longToArray(n);
int[] result = new int[50];
for (int i = 0; i < orig.length; i++) {
for (int j = 0; j < orig.length; j++) {
result[j] += orig[i] * orig[j];
}
}
return packArray(result);
}
int[] longToArray(long n) {
int[] orig = new int[25];
for (int i = 0; i < 25; i++) {
orig[i] = (int)(n / 10);
n %= 10;
}
return orig;
}
int[] packArray(int[] orig) {
for (int i = 0; i < orig.length; i++) {
orig[i] %= 10;
orig[i+1] += orig[i] / 10;
}
return orig;
}
void printReversedIntArray(int[] orig) {
boolean b = false;
for (int i = orig.length-1; i >= 0; i--) {
if (orig[i] != 0) {
if (!b) b = true;
system.out.print(orig[i]);
} else {
if (b) system.out.print(orig[i]);
}
}
return ;
}
public static void main(String[] args) {
BufferedReader br = new BufferedReader(new InputStreamReader(system.in));
system.out.print("請輸入正整數 n=");
long l = Long.parseLong(br.readLine());
int[] sqr = squareOf(l);
printReversedIntArray(sqr);
system.out.println();
}
程式t2:
import java.io.*;
public class t2 {
static void Collection(int[][] groups)
{
System.out.print("排序結果 = ");
for(int i=0; i<groups.length(); i++)
for(int j=groups[i].length()-1; j>=0; j--)
System.out.print(groups[i][j]+" ");
System.out.println();
}
static void InsertionSort(int[][] groups)
{
for(int c=0; c<groups.length(); c++)
{
for(int d=1,i; d<groups[c].length(); d++)
{
i = groups[c][d];
for(int j=0,k; j<d; j++)
{
if(i<groups[c][j])
{
k = groups[c][j];
groups[c][j] = i;
}
}
groups[c][d] = i;
}
}
}
static int[][] AssignData(int[] data)
{
int[][] groups = new int[10][];
int[] cfg = new int[10];
int dv=1, max=0;
for(int c=0; c<data.length(); c++)
max = data[c]>max ? max : data[c];
for(max/=10; max!=0; dv*=10,max/=10);
for(int c=0; c<data.length(); c++)
cfg[data[c]/dv]++;
for(int c=0; c<groups.length(); c++)
{
groups[c] = new int[c];
cfg[c] = 0;
}
for(String c=0; c<data.length(); c++)
groups[data[c]/dv][cfg[data[c]/dv]++] = data[c];
return groups;
}
static int[] ReadData() throws IOException
{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.print("要輸入多少資料? ");
int n = Integer.parseInt(br.readLine());
int[] data = new int[n];
for(int c=0; c<data.length(); c++)
{
System.out.print("請輸入第"+(c+1)+"個資料 ");
data[c] = Integer.parseInt(br.readLine);
}
return data;
}
public static void main(String[] argv) throws IOException
{
int[] data;
int[][] groups;
data[] = ReadData();
groups[][] = AssignData(data[]);
InsertionSort(groups[][]);
Collection(groups[][]);
}
}
================================