##### 遇到好漂亮的題目~~或是莫名其妙的題目~~再打,不然等我有空再說。 :::info `水` : 水題,或是莫名其妙的題目。 `典` : 相關內容是經典題目。 `好` : 好題,對於該內容有好的引導或實作,或著是寫的方法超漂亮。 `初` : 適合剛接觸該內容的解題者。 `進` : 該題在運用相關內容時相對進階。 ::: 如果沒有標就代表他不再上述內容,**但這不代表他是破題**。 ##### 對於定義的方式本文作者有最終解釋權。 --- # `初` [a424: 佛祖絕對不輸的宗教之戰 0](https://dandanjudge.fdhs.tyc.edu.tw/ShowProblem?problemid=a424) 我覺得這題給剛學陣列的寫非常不錯,因為他要把陣列轉過來做,初學應該不是那麼懂...吧? 重點在算平均的地方,已知同一列(直為行,橫為列。)是同一人不同科目的成績,所以同一行是不同人同科目的成績。 所以你需要固定同一行,要好理解一點就是把陣列轉 $90^。$,遍歷加總後除以人數。 也就是把雙層的迴圈由原本的範圍 ---- `n , m` 變成 `m , n`。 這邊放一下程式碼應該會更好理解,然後我應該不會畫圖,畫圖都要搞好久。 ```cpp // 輸入。 for(int i = 0 ; i < n ; i++){ for(int j = 0 ; j < m ; j++){ } } // 做平均的運算。 for(int j = 0 ; j < m ; j++){ for(int i = 0 ; i < n ; i++){ } } ``` 我覺得對於初學比較重要的是,題目說的上高斯($\lceil \; \; \rceil$ ),也就是向上取整,也就是無條件進位。 ~~然後我沒有看到題目說的這個一直卡。~~ 要取上高斯的方法有很多,你可以自己慢慢實作,也可以用函式。 要用函式的話你會需要引入函式庫 `#include <math.h>` 。 ```cpp #include <math.h> ``` 接著會用到這個 `ceil( )`,代表無條件進位。 有一個小重點是你的資料型態,如果你的資料型態是 `int` 的話他會**無條件捨去**,所以你可以在一開始宣告時用 `double` ,或是在運算時前面括號 `double` ,強制把他暫時當做 `double`。 ```cpp average[j] = ceil( (double)average[j] / n) ; ``` 這樣就成功的無條件進位了。 接下來就剩單純的判斷然後輸出。
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up