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