<!-- {%hackmd theme-dark %} -->
# CPP Practice
:::success
### Table of Contents
[TOC]
:::
### Variable vs. Simple Operator
- Zero Judge
- [d483. hello, world](https://zerojudge.tw/ShowProblem?problemid=d483)
:::spoiler 內容
<br>
Hello, World程式指的是只在計算機螢幕上輸出「Hello, World!」(意為「世界,你好!」)這行字元串的計算機程式。一般來說,這是每一種計算機程式語言中最基本、最簡單的程式,亦通常是初學者所編寫的第一個程式。它還可以用來確定該語言的編譯器、程式開發環境,以及執行環境是否已經安裝妥當。
將輸出字元串 "Hello World" 作為第一個範例程式,現在已經成為程式語言學習的傳統。該程式因 Brian Kernighan 和丹尼斯·里奇(Dennis M. Ritchie)所著的計算機程式設計教程《C語言程式設計》(The C Programming Language)中使用而廣泛流傳;但這本書並不是 "Hello World" 的濫觴,雖然這是一個普遍存在的錯誤認知。
「Hello World」範常式式最早出現於 1972 年,由貝爾實驗室成 員 Brian Kernighan 撰寫的內部技術文件《Introduction to the Language B》之中。不久同作者於 1974 年所撰寫的《Programming in C: A Tutorial》,也延用這個範例;而以本文件擴編改寫的《C語言程式設計》也保留了這個範例程式。
起初,"hello, world" 程式的標準列印內容必須滿足「全小寫,無驚嘆號,逗點後需空一格」。不過沿用至今,完全恪守傳統的反而罕見。
:::
<br>
:::spoiler 輸入說明
<br>
為了驗證程式的正確性,大多數的題目多會提供輸入資料。你的程式必須讀入輸入資料,再依據你讀到的資料求出所要求的結果並將之輸出。你看不到這些輸入的資料,所以你也無法預測要輸出什麼結果,因此你的程式必須依照題目的要求來計算。但是作為學習程式設計的第一題,你的程式不需要讀入任何的資料,當然也不需要依據輸入的資料來計算,只需要輸出一個固定的字串就可以了。
:::
<br>
:::spoiler 輸出說明
<br>
請輸出「hello, world」文字 (不含「」)。
:::
<br>
:::spoiler 範例輸入/ 輸出
<br>
- `Input #1:`
- `Output #1:` hello, world
:::
<br>
:::spoiler 提示
<br>
1. 基礎的輸出而已 :D
:::
<br>
- [a001. 哈囉](https://zerojudge.tw/ShowProblem?problemid=a001)
:::spoiler 內容
<br>
學習所有程式語言的第一個練習題
請寫一個程式,可以讀入指定的字串,並且輸出指定的字串。
比如:輸入字串 "world", 則請輸出 "hello, world"
:::
<br>
:::spoiler 輸入說明
<br>
輸入總共一行,內含一組文字
:::
<br>
:::spoiler 輸出說明
<br>
輸出題目指定的文字。
:::
<br>
:::spoiler 範例輸入/ 輸出
<br>
- `Input #1:` world
- `Output #1:` hello, world
- `Input #2:` C++
- `Output #2:` hello, C++
- `Input #3:` Taiwan
- `Output #3:` hello, Taiwan
:::
<br>
:::spoiler 提示
<br>
1. 需有字元陣列/ 字串儲存輸入的內容
2. 注意輸出格式
:::
<br>
- [a002. 簡易加法](https://zerojudge.tw/ShowProblem?problemid=a002)
:::spoiler 內容
<br>
請寫一個程式,讀入兩個數字,並求出它們的和。
:::
<br>
:::spoiler 輸入說明
<br>
每組輸入共一行,內含有兩個整數 a, b,以空白隔開,a, b絕對值皆小於 `10^6` 。
:::
<br>
:::spoiler 輸出說明
<br>
對於每組輸入,輸出該兩整數的和。
:::
<br>
:::spoiler 範例輸入/ 輸出
<br>
- `Input #1:` 5 10
- `Output #1:` 15
- `Input #2:` 1 2
- `Output #2:` 3
:::
<br>
:::spoiler 提示
<br>
1. 資料大小不大,用`int` 就行
2. 基本輸入輸出+ 兩數相加
:::
<br>
- [d489. 伏林的三角地](https://zerojudge.tw/ShowProblem?problemid=d489)
:::spoiler 內容
<br>
斜角巷是一個已開發的老社區,其中的空地取得非常地困難。但是隨著社會的進步,人們想要蓋的房子越來越大,但是越大的土地就越難取得,因此,越大的土地價格也越高。事實上,在斜角巷的土地價格便是以土地面積的平方來計算的。伏林在斜角巷有一塊三角形的土地,給你那塊土地的邊長,他想請你幫她算算那塊土地價值多少錢?
:::
<br>
:::spoiler 輸入說明
<br>
輸入只有一行,含有三個以空白隔開的正整數,代表伏林的三角形土地的三邊長。
:::
<br>
:::spoiler 輸出說明
<br>
請輸出一個整數,代表伏林的土地的價值。其價值會是一個介於 1 和 2147483647 之間的整數。
:::
<br>
:::spoiler 範例輸入/ 輸出
<br>
- `Input #1:` 3 4 5
- `Output #1:` 36
:::
<br>
:::spoiler 提示
<br>
1. 資料大小不大,用`int`就好
2. 海龍公式: `s= (a+ b+ c)/ 2`, `area= sqrt(s(s-a)(s-b)(s-c))`
:::
<br>
- [d827. 買鉛筆](https://zerojudge.tw/ShowProblem?problemid=d827)
:::spoiler 內容
<br>
鉛筆一支 5 元,一打 50 元。小明需要幫班上每位同學買一枝鉛筆,請問要多少錢?由於小明很注重環保,他絕不會為了省錢而多買任何不需要的東西。也就是說,小明買的鉛筆數量一定等於班上的人數。
:::
<br>
:::spoiler 輸入說明
<br>
輸入只有一行,含有小明班上的人數 n,1 ≤ n ≤ 200。。
:::
<br>
:::spoiler 輸出說明
<br>
請輸出一個數字,代表這次採購的金額。
:::
<br>
:::spoiler 範例輸入/ 輸出
<br>
- `Input #1:` 42
- `Output #1:` 180
- `Input #2:` 11
- `Output #2:` 55
:::
<br>
:::spoiler 提示
<br>
1. 資料大小用`int` 就行了
2. 相信大家都可以完成的吧! 我就不提示了 :D
:::
<br>
- [d060. 還要等多久啊?](https://zerojudge.tw/ShowProblem?problemid=d060)
:::spoiler 內容
<br>
文文又想打電話給珊珊,可是這次他碰到了另一個問題。珊珊說他們學校每堂課 50 分鐘,下課的時間都是整點過後 25 分,休息 10 鐘後再上下一節課。文文不想打擾珊珊上課,也不想才剛打通電話她就要上課去了,因此他決定一定要在剛好 25 分的時候打電話給她。給你現在的時間的分,請你幫他算算看還要等多久才能打電話給珊珊?
:::
<br>
:::spoiler 輸入說明
<br>
輸入只有一行,包含現在時間的分 m (0 ≤ m ≤ 59)。
:::
<br>
:::spoiler 輸出說明
<br>
輸出還要等幾分鐘文文才能打電話。
:::
<br>
:::spoiler 範例輸入/ 輸出
<br>
- `Input #1:` 20
- `Output #1:` 5
:::
<br>
:::spoiler 提示
<br>
1. 如果想挑戰不用`if`的話,可以試試用`mod(%)`做思考
:::
<br>
- [d485. 我愛偶數](https://zerojudge.tw/ShowProblem?problemid=d485)
:::spoiler 內容
<br>
文文很喜歡偶數,他甚至有收集偶數的習慣。你給他一個範圍的連續整數,他就會把其中的偶數留下來收藏。如今他又拿到了一個範圍的整數,請問他這次收藏了幾個偶數?對文文來說,0 也算是一個偶數哦!
:::
<br>
:::spoiler 輸入說明
<br>
輸入只有一行,其中含有兩個由空白隔開的整數 a, b (0 ≤ a ≤ b ≤ 2147483647)。
:::
<br>
:::spoiler 輸出說明
<br>
輸出一個整數,代表 a 與 b 之間 (含 a 與 b) 一共有多少個偶數。
:::
<br>
:::spoiler 範例輸入/ 輸出
<br>
- `Input #1:` 1 4
- `Output #1:` 2
:::
<br>
:::spoiler 提示
<br>
1. 如果挑戰不用`if` 的話可以試試看`(condition)?(statement if true):(statement if false)`
:::
<br>
- [d051. 糟糕,我發燒了!](https://zerojudge.tw/ShowProblem?problemid=d051)
:::spoiler 內容
<br>
珊珊在美國讀書,有一天覺得昏沉沉的全身不舒服,心想自己是不是發燒了。到藥局買了一支體溫計量了一下體溫,發現她的體溫是華氏 104 度。習慣了台灣的攝氏,她一時還不知道自己的體溫到底有多燒。你能不能幫她寫個程式,把華氏的溫度轉成攝氏的溫度。
:::
<br>
:::spoiler 輸入說明
<br>
輸入僅有一行,含有一個整數 f (-460 ≤ f ≤ 2147483647),代表華氏溫度。
:::
<br>
:::spoiler 輸出說明
<br>
輸出計算所得的攝氐溫度,精確到小數點以下三位。
:::
<br>
:::spoiler 範例輸入/ 輸出
<br>
- `Input #1:` 104
- `Output #1:` 40.000
- `Input #2:` 98
- `Output #2:` 36.667
:::
<br>
:::spoiler 提示
<br>
1. 資料有小數所以要用`浮點數(double)`
2. #include<iomanip>: 引入`setprecision`
3. fixed vs. scientific
:::
<br>
- [b004. 繩子上吃草的牛](https://zerojudge.tw/ShowProblem?problemid=a001)
:::spoiler 內容
<br>
一頭牛正在牧場中吃草,而且這頭牛的鼻環穿過了一條綁在兩根柱子之間的繩子。由於環可以自由在繩子上移動,所以這頭牛相當於綁在這條繩子上的任何一個地方。你的工作是求出這頭牛可以吃多少面積的草。假設 pi = 2*cos-1(0) (在這裡角度以弧度表示)。同時,你可以假設繩子不具寬度、牛視為一個點,並且柱子和環的寬度可以忽略。請你用 double 這種資料型態來進行浮點數的運算。
面積= PI * 半長軸長 * 半短軸長
:::
<br>
:::spoiler 輸入說明
<br>
每列包含了兩個整數 D (0 <= D <= 1000 )以及 L (D < L <= 1500 )。第一個整數D代表兩根柱子之間的距離;第二個整數L代表繩子的長度。
:::
<br>
:::spoiler 輸出說明
<br>
對於每筆測試資料請輸出一列,包含一個浮點數,精確到小數以下第三位。這個浮點數代表了牛可以吃到的草地面積。
:::
<br>
:::spoiler 範例輸入/ 輸出
<br>
- `Input #1:` 10 12
- `Output #1:` 62.517
- `Input #2:` 23 45
- `Output #2:` 1366.999
- `Input #3:` 12 18
- `Output #3:` 189.670
:::
<br>
:::spoiler 提示
<br>
1. 資料有小數所以要用`浮點數(double)`
2. `area= PI* 半長軸* 辦短軸`
:::
<br>
- [d039. Searching for Nessy](https://zerojudge.tw/ShowProblem?problemid=d039)
:::spoiler 內容
<br>

尼斯湖水怪是一隻住在尼斯湖中神秘且不明的動物。尼斯湖則是北蘇格蘭的印芬尼斯市附近的一個大且深的淡水湖。尼斯怪通常被視為一種湖怪。
[參考資料](http://en.wikipedia.org/wiki/Loch_Ness_Monster)
2003 年 7 月,BBC (英國國家廣播電視公司) 曾報導了一項他們對尼斯湖所作的大規模研究,他們用 600 支聲納也沒有辦法在湖中找到任何「水怪」(也就是任何已知或未知的大型動物) 的踪跡。他們推論尼斯怪並不存在。現在我們要重覆這項實驗。
給你一個 n 列 m 行的格子代表尼斯湖,6 ≤ n, m ≤ 10000,找出最少要放幾個聲納才能控制所有的方格,條件如下:
* 一個聲納佔一格;它的監控範圍為所在的那一格及緊鄰的格子;
* 邊緣的格子不需要監控,因為尼斯怪太大了,無法蔵在那兒。
For Example:


其中 X 代表聲納,灰色區域則是它所監控的範圍。最後一個圖則是一組可接受的解答。
:::
<br>
:::spoiler 輸入說明
<br>
輸入的第一行有一個整數,t,代表測試筆數。每筆測資一行,含有兩個由空白分開的數字,6 ≤ n, m ≤ 10000,也就是格子的大小 (n 列 m 行)。
:::
<br>
:::spoiler 輸出說明
<br>
每筆測資輸出一行,顯示符合上述條件的最小數字。
:::
<br>
:::spoiler 範例輸入/ 輸出
<br>
- `Input #1:`
3
6 6
7 7
9 13
- `Output #1:`
4
4
12
:::
<br>
:::spoiler 提示
<br>
1. ∵ 邊緣的格子不需要監控 ∴ 不須考慮除不盡的部分
2. 這題有點難,可以花一點時間想想
:::
<br>
- [a861. 1. Secure the Perimeter](https://zerojudge.tw/ShowProblem?problemid=a861)
:::spoiler 內容
<br>
有個屋主想在矩形花園的周圍建造籬笆,屋主考慮了許多不同的設計方案,每一個方案都有不同的尺寸,每個方案所需的材料和時間成本取決於籬笆的總長度,籬笆的周長P
可以由籬笆的寬H和籬笆的長W而得:
``` P = 2xH + 2xW ```

請寫一個程式來計算籬笆的總長度
:::
<br>
:::spoiler 輸入說明
<br>
輸入包含兩個正整數H和W
:::
<br>
:::spoiler 輸出說明
<br>
輸出該籬笆周長,保證答案小於2^31-1。
:::
<br>
:::spoiler 範例輸入/ 輸出
<br>
- `Input #1:`
4 6
8 5
- `Output #1:`
20
26
:::
<br>
:::spoiler 提示
<br>
:::
<br>