[閒聊] JAVA上機考
寫在前面,這篇只是賺P幣的閒聊文XD
(在星海版輸光了...)
如果認為有用的請自行轉載,因為我不會
這次上機考的三個題目如下:
除法
魔術方陣
逆‧猜數字
===============除法================
input:
三個整數 x , y , z
output:
x 除以 y 取到小數點第 z 位
特殊要求:
● z 至少會到100以上(簡單說就是會故意超出Integer跟long的最大範圍)
○ 結果不用四捨五入
● 在測試時,如果已經整除,後面就給他顯示一堆「0」沒差(因為考試時不會
出現這問題)
Info:
想想你當初用直式運算計算除法的「每一個步驟」
(跟長除法比起來,我自己習慣說這是直式運算XD)
然後老師說這題理想10行內解決(不算必要的部分)
==============魔術方陣================
input:
一個正整數 N
output:
一個 N*N 的魔術方陣
(所謂魔術方陣就是該矩陣中不管直橫斜相加都一樣)
ex: N = 3
→ 4 9 2
3 5 7
8 1 6
特殊要求:
● N 一定是奇數,但是 N 可能會到10幾20以上
○ 在魔術方陣中的數字是 1~ N*N 且不重複(好像廢話囧)
● 1 一定要在矩陣的最下面中間
○ 最後的輸出結果格式要對齊
演算法:
X ← n-1 , y ← n/2取「下高斯」
將 1 放入 p[x,y] (就是把1放到矩陣最下面的中間)
for W ← 2 to n*n do
x ← x+1 , y ← y+1
if(x==n && y==n) or (p[x,y]已經有值) then
x ← x-2 , y ← y-1
else if x >= n then
x ← 最小的 x 且p[x,y]尚未放值
else if y >= n then
y ← 最小的 y 且p[x,y]尚未放值
end if
W 放入 p[x,y]
end for
Info:
不要想得太複雜,就是一直往右下就是了,然後有出界就繞一圈到另一邊去
,有值了就往上一格。
理想值約20行可以寫完。
碎碎念:
這題是唯一有秀程式碼的,不過想參考的要注意
for(r=0;p[r][c]!=0;r++); ←你沒看錯,他就直接接分號,中間沒任何程式
只要你知道上面那行在作啥,這程式就很簡單了(照相手機真方便(茶))
這 for 迴圈語法跟 c++ 一樣,要看懂應該不難。當然,你要硬背也可以XD。
難怪老師很放心的秀出程式(小聲)
==============逆‧猜數字================
(OS:好懷念當初猜數字就真的只是猜數字XD,因為這個跟平常所想的不一樣,所以
我多了一個「逆」字,只是自己的習慣)
(A,B 所代表的意思應該不用再解說了吧囧)
input:
在每次的猜測中,使用者需自行輸入 A , B
output:
使用者自己所先設想的答案
特殊要求:
● 需在10次以內猜出
○ 設想的答案是四位不重複數字(廢話)
演算法:
P是0000-9999中所有可能答案的集合
x ← 0 , y ← 0
repert
t ← 從 P集合 中任選其中一個元素
input x and y
從 P集合 中移除與 t 的相似度不是 xAyB 得元素
until x==4
Info:
簡單說就是假設我們猜「0123」
拿到的回傳值是「0A2B」
那我們便開始拿
「我們猜的數字」與「P集合中得元素」比對:
0123 , 0123 →4A0B,不是「0A2B」,刪除
0123 , 0124 →3A0B,不是「0A2B」,踢掉
:
:
:
0123 , 1045 →0A2B,是「0A2B」,留著
第一輪過濾完後,在猜第二次,在進行第二次過濾
一直猜到答案出現
理想值通常都在100行左右(跳真大)
--
「我站在這裡!像這樣活著!這就是我...生存的意義!!」
~Tales of the Abyss~
生まれた意味を知るRPG
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.131.229.33
※ 編輯: steven70101 來自: 140.128.142.226 (03/10 17:13)
推
03/28 00:52, , 1F
03/28 00:52, 1F
推
03/28 00:54, , 2F
03/28 00:54, 2F