前往
大廳
主題

ZeroJudge - f427: 高雄市109年資訊競賽國中組第五題 解題心得

Not In My Back Yard | 2020-11-24 00:00:02 | 巴幣 0 | 人氣 384

題目連結:


題目大意:
給定一正整數 x (0 < x < 16),請輸出圓周率(PI)小數點後第 x 位之值。



範例輸入:
範例輸入一:
1

範例輸入二:
2

範例輸入三:
3

範例輸入四:
5


範例輸出:
範例輸出一:
1

範例輸出二:
4

範例輸出三:
1

範例輸出四:
9


解題思維:
圓周率為
3.141592653589793……
如果有背的話,這題是可以直接放進陣列然後輸出對應的值。



但是如果沒有背的話,大部分語言都有自行定義 PI 的值,例如 C++ 的 <cmath> 標頭檔(即 C 的 <math.h>)中的 M_PI 、 Python 的 math.pi 等等。不過 Visual Studio 寫 C++ 要使用 cmath 所定義的常數前,要在 <cmath> 前面加上「#define _USE_MATH_DEFINES」才能使用。



但是除了以上常見的方式以外,還有一個特別的方式可以得知圓周率之值,即 acos(-1)。acos() 代表三角函數 cos() 的反函數,其定義域(輸入)為 [-1, 1]、值域(輸出)為 [0, π]。而 cos(π) = -1 ,因此 acos(-1) = π。

對於 C++ 來說 acos(-1) 只能精確到小數點後 15 位(因為雙精度浮點數(double 型態)的緣故),但是對於本題來說已經夠用了。



題外話:推薦 3Blue1Brown 這個 Youtube 頻道,裡面除了介紹了微積分與線性代數的基本概念以及視覺化,還有著不少的數學科普。有興趣的讀者可以看看。




此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

大薯買一送一
請問您的程式碼 為何在 DEV-C++ 這個程式跑不過呢感謝 有無方法解決
2022-06-15 17:27:18
Not In My Back Yard
不好意思,請問一下是跑出什麼錯誤呢?編譯失敗的時候,編譯器會告訴你一些錯誤訊息。
預設應該是下方會出現「編譯器訊息」(如果是英文的話,應該是「Compiler」開頭之類的東西)
2022-06-15 21:24:09
Not In My Back Yard
不過我先猜是
cin.sync_with_stdio(false); cin.tie(nullptr);
這句程式碼的問題,可以先註解掉(或是直接刪掉)看看。

因為 Dev-C++ 很久沒有更新了,所以他的 C++ 沒記錯的話還停留在 C99 的標準。因此,nullptr 這種比較後期才定義的保留字編譯器會抓不到。
2022-06-15 21:26:14
大薯買一送一
你好猛 我照你的說 直接 刪掉了
就可以跑出來了 謝謝您
2022-06-15 21:48:29

更多創作