From 328d59e32b6192f0a814aec378010f852f12e5b2 Mon Sep 17 00:00:00 2001 From: nuskey8 <84110981+nuskey8@users.noreply.github.com> Date: Fri, 2 May 2025 22:15:28 +0900 Subject: [PATCH 1/9] =?UTF-8?q?=E6=BC=94=E7=BF=92=E5=95=8F=E9=A1=8C?= =?UTF-8?q?=E3=83=9A=E3=83=BC=E3=82=B8=E3=81=AE=E6=94=B9=E5=96=84=20(chapt?= =?UTF-8?q?er-2/practice)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/text/chapter-2/practice/4bit.md | 65 ++++++++++++++++-- .../text/chapter-2/practice/multiplication.md | 33 +++++++++- docs/text/chapter-2/practice/sum.md | 66 ++++++++++++++++--- 3 files changed, 147 insertions(+), 17 deletions(-) diff --git a/docs/text/chapter-2/practice/4bit.md b/docs/text/chapter-2/practice/4bit.md index 45a54a8b..413d3c58 100644 --- a/docs/text/chapter-2/practice/4bit.md +++ b/docs/text/chapter-2/practice/4bit.md @@ -2,25 +2,78 @@ 入力から$0 <= n < 16$の整数値を受け取り、2進数で表記しよう。 -:::spoiler Hint 1 -int型では、`5 / 3`は`1`になる。 +### 入力/出力例 + +:::info 例1 + +:::spoiler クリックして展開 + +**入力** + +``` +9 +``` + +**出力** + +``` +1001 +``` + +::: + +:::info 例2 + +:::spoiler クリックして展開 + +**入力** + +``` +13 +``` + +**出力** + +``` +1101 +``` + +::: + +### ヒント + +:::tip ヒント1 + +:::spoiler クリックして展開 +`int`型では、`5 / 3`は`1`になる。 ::: -:::spoiler Hint 2 + +:::tip ヒント2 + +:::spoiler クリックして展開 整数型の余りは`%`で得ることができる。 ::: -:::spoiler Hint 3 +:::tip ヒント3 + +:::spoiler クリックして展開 1桁ずつ出力してみよう。 ::: -:::spoiler Hint 4 +:::tip ヒント4 + +:::spoiler クリックして展開 $\displaystyle\left\lfloor\frac{n}{2^k}\right\rfloor$を2進数表記すると、$n$の2進数表記の$k+1$桁目以上を得ることができる。 ::: -:::spoiler Answer +### 解答例 + +:::danger 解答例1 + +:::spoiler クリックして展開 ```cpp #include using namespace std; diff --git a/docs/text/chapter-2/practice/multiplication.md b/docs/text/chapter-2/practice/multiplication.md index 3e65e6eb..784f75f9 100644 --- a/docs/text/chapter-2/practice/multiplication.md +++ b/docs/text/chapter-2/practice/multiplication.md @@ -2,15 +2,42 @@ cinでint型の整数を2つ受け取って、その積をターミナルに出力しよう。 -:::spoiler Hint 1 +### 入力/出力例 + +:::info 例1 + +:::spoiler クリックして展開 + +**入力** + +``` +3 4 +``` + +**出力** + +``` +12 +``` + +::: + +### ヒント + +:::tip ヒント1 + +:::spoiler クリックして展開 2つの値を入力から受け取るには、 ```cpp cin >> first_value >> second_value; ``` - ::: -:::spoiler Answer +### 解答例 + +:::danger 解答例1 + +:::spoiler クリックして展開 ```cpp #include diff --git a/docs/text/chapter-2/practice/sum.md b/docs/text/chapter-2/practice/sum.md index c0a6fc5b..e5f40d6b 100644 --- a/docs/text/chapter-2/practice/sum.md +++ b/docs/text/chapter-2/practice/sum.md @@ -2,25 +2,75 @@ cin で自然数 $n$ を受け取って、$1$ から $n$ までの和を出力するプログラムを作成してください。 -例えば `10` を受け取ったとき、 1+2+3+4+5+6+7+8+9+10 を計算して `55` を出力できれば OK です。 +### 入力/出力例 + +:::info 例1 + +:::spoiler クリックして展開 + +**入力** + +``` +10 +``` + +**出力** + +``` +55 +``` + +> $1+2+3+4+5+6+7+8+9+10$ を計算します。 -::: spoiler Hint 1 -今までの知識で解けるはず。手で計算する時、わざわざ足していますか? ::: -::: spoiler Hint 2 +:::info 例1 + +:::spoiler クリックして展開 + +**入力** + +``` +100 +``` + +**出力** + +``` +5050 +``` + +> $1+2+ \dots + 100$ を計算します。 + +::: + +### ヒント + +:::tip ヒント1 + +:::spoiler クリックして展開 +実際に計算する際にどのような手順で行うかを考えてみましょう。100までの総和などは1つずつ足していくのではなく、なんらかの方法でもっと簡単に求めていたはずです。 +::: + +:::tip ヒント2 + +::: spoiler クリックして展開 総和を求める公式は $\dfrac{1}{2} n (n+1)$ でした。 ::: -::: spoiler Hint 3 (なぜか計算が合わない人) -プログラムにおいては、計算は左から順番に行われ、途中計算は必ず int 型(=整数)に切り捨てられます。 +:::tip ヒント3 (なぜか計算が合わない人へ) -つまり、最初に `1/2` と書くとそこで 0 になってしまいます。 +::: spoiler クリックして展開 +プログラムにおいては、計算は左から順番に行われ、途中計算は必ず `int` 型(=整数)に切り捨てられます。つまり、最初に `1/2` と書くとそこで 0 になってしまいます。 計算の順序を工夫する必要がありそうです。 ::: -::: spoiler Answer +### 解答例 + +:::danger 解答例1 + +:::spoiler クリックして展開 ```cpp #include From 280848383f9a06b983517e6cbaa7728d9a543fa2 Mon Sep 17 00:00:00 2001 From: nuskey8 <84110981+nuskey8@users.noreply.github.com> Date: Fri, 2 May 2025 22:15:48 +0900 Subject: [PATCH 2/9] =?UTF-8?q?=E6=BC=94=E7=BF=92=E5=95=8F=E9=A1=8C?= =?UTF-8?q?=E3=83=9A=E3=83=BC=E3=82=B8=E3=81=AE=E6=94=B9=E5=96=84=20(chapt?= =?UTF-8?q?er-3/practice)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../chapter-3/practice/de-morgans-laws.md | 60 ++++++++++++-- docs/text/chapter-3/practice/echo.md | 39 ++++++++- docs/text/chapter-3/practice/fraction.md | 82 +++++++++++++++---- docs/text/chapter-3/practice/int128.md | 41 +++++++++- 4 files changed, 192 insertions(+), 30 deletions(-) diff --git a/docs/text/chapter-3/practice/de-morgans-laws.md b/docs/text/chapter-3/practice/de-morgans-laws.md index 5ed46f10..c1182c97 100644 --- a/docs/text/chapter-3/practice/de-morgans-laws.md +++ b/docs/text/chapter-3/practice/de-morgans-laws.md @@ -1,6 +1,6 @@ # 3-B2. De Morgan's laws -`bool`型の値`P`、`Q`が与えられるので、ド・モルガンの法則が成り立つことを実際に確かめよう。 +`bool`型の値`P`、`Q`から、論理演算子(`!`, `&&`, `||`)を用いてド・モルガンの法則が成り立つことを実際に確かめよう。 ::: tip ド・モルガンの法則 @@ -11,30 +11,74 @@ $\lnot(P \lor Q) \Leftrightarrow \lnot P \land \lnot Q$ ::: -:::spoiler Hint -考えられる$P,Q$の組は以下の4つ +### 入力/出力例 -| (P,Q) | P = false | P = true | -| --- | --- | --- | -| Q = false | (false, false) | (true, false) | -| Q = true | (false, true) | (true, true) | +以下の例では上のド・モルガンの法則の式の1つ目を`case 1`、2つ目を`case 2`としてコード内でチェックを行い、左辺と右辺の結果が一致している場合は`ok`と出力します。 +:::info 例1 + +:::spoiler クリックして展開 + +**入力** + +``` +true false +``` + +**出力** + +``` +case 1: ok +case 2: ok +``` + +::: + +### ヒント + +:::tip ヒント1 + +:::spoiler クリックして展開 +PとQが文字列として与えられるため、まずは`string`型で入力を受け取り、その値をチェックして`bool`型に変換しましょう。`==`演算子を用いればできるはず。 ::: -:::spoiler Answer +:::tip ヒント2 + +:::spoiler クリックして展開 +受け取った文字列を比較し、`"true"`と比較した結果を`bool`型の変数に代入しましょう。 + +```cpp +bool p = p_string == "true"; +``` + +`==`などの演算子も結果が`bool`型になるだけで、本質的には`+`などの演算と変わりありません。そのため、`if`文の条件などに使用するだけでなく、このようにして変数に結果を格納することも可能です。 +::: + +### 解答例 + +:::danger 解答例1 + +:::spoiler クリックして展開 ```cpp #include using namespace std; int main() { + // 入力をstringとして受け取る string p_string, q_string; cin >> p_string >> q_string; + + // 文字列が"true"かどうかをチェックし、bool型としてPとQを格納 bool p = p_string == "true"; bool q = q_string == "true"; + + // case 1 if (!(p && q) == (!p || !q)) { cout << "case 1: ok" << endl; } + + // case 2 if (!(p || q) == (!p && !q)) { cout << "case 2: ok" << endl; } diff --git a/docs/text/chapter-3/practice/echo.md b/docs/text/chapter-3/practice/echo.md index b23778ff..e79a0339 100644 --- a/docs/text/chapter-3/practice/echo.md +++ b/docs/text/chapter-3/practice/echo.md @@ -2,14 +2,40 @@ 入力から単語を1つ受け取り、それを出力しよう。 -:::spoiler Hint 1 +### 入力/出力例 + +:::info 例1 + +:::spoiler クリックして展開 + +**入力** + +``` +Hello! +``` + +**出力** + +``` +Hello! +``` + +::: + +### ヒント + +:::tip ヒント1 + +:::spoiler クリックして展開 文字列型の変数を使うには、 ```cpp string s; ``` ::: -:::spoiler Hint 2 +:::tip ヒント2 + +:::spoiler クリックして展開 もしもこんなエラーが出たとしたら、 ``` ./Main.cpp:4:5: error: unknown type name 'string'; did you mean 'std::string'? @@ -24,12 +50,17 @@ using namespace std; で、`std::`を省略できるようにしよう。 ::: -:::spoiler Hint 3 +:::tip ヒント3 + +:::spoiler クリックして展開 入力を受け取るには`cin`を、出力するには`cout`を使おう。 ::: +### 解答例 + +:::danger 解答例1 -:::spoiler Answer +:::spoiler クリックして展開 ```cpp #include diff --git a/docs/text/chapter-3/practice/fraction.md b/docs/text/chapter-3/practice/fraction.md index d97383b3..76c47126 100644 --- a/docs/text/chapter-3/practice/fraction.md +++ b/docs/text/chapter-3/practice/fraction.md @@ -1,36 +1,83 @@ # 3-A2. Fraction -入力から整数$a,b,c,d$を受け取り、$a/b+c/d$を計算して、存在するなら分数`n/d`として表示しよう。 -### 入出力例 1 -入力 +入力から整数$a,b,c,d$を受け取り、$a/b+c/d$を計算して、存在するなら分数`n/d`のような文字列して表示しよう。 + +結果を約分する必要はないものとします。 + +### 入力/出力例 + +:::info 例1 + +:::spoiler クリックして展開 + +**入力** + ``` 1 2 3 4 ``` -出力例 + +**出力** + ``` 10/8 ``` -約分する必要はない。 -### 入出力例 2 -入力 + +> $\frac{1}{2} + \frac{3}{4} = \frac{10}{8}$ + +::: + +:::info 例2 + +:::spoiler クリックして展開 + +**入力** + ``` 1 3 5 7 ``` -出力例 + +**出力** + ``` 22/21 ``` -### 入出力例 3 -入力 + +> $\frac{1}{3} + \frac{5}{7} = \frac{22}{21}$ + +::: + +:::info 例3 + +:::spoiler クリックして展開 + +**入力** + ``` 1 0 1 0 ``` -出力例 + +**出力** + ``` ``` -$\frac{1}{0}$は存在しない。 -:::spoiler Answer +> 0除算は定義されないため、$\frac{1}{0}$は存在しません。 + +::: + +### ヒント + +:::tip ヒント1 + +::: spoiler クリックして展開 +今回は約分が必要ないので、最小公倍数を求める必要はありません。素直に掛け算で分母を求めてしまってよいでしょう。 +::: + +### 解答例 + +:::danger 解答例1 + +:::spoiler クリックして展開 ```cpp #include using namespace std; @@ -38,12 +85,19 @@ using namespace std; int main() { int a, b, c ,d; cin >> a >> b >> c >> d; + + // 分母が0でないなら if (b != 0 && d != 0) { + // 分母を計算 (今回は約分が不要なため、最小公倍数でなくともよい) int denominator = b * d; + + // 分子を計算 int numerator = a * d + c * b; + + // 結果を出力 cout << numerator << "/" << denominator << endl; } } ``` -なお、約分をしたい場合は`std::gcd`などを使って最小公倍数を得ることができる。 +なお、約分をしたい場合は`std::gcd`などを使って最小公倍数を得ることができます。 ::: diff --git a/docs/text/chapter-3/practice/int128.md b/docs/text/chapter-3/practice/int128.md index 55834dff..b049b3b5 100644 --- a/docs/text/chapter-3/practice/int128.md +++ b/docs/text/chapter-3/practice/int128.md @@ -1,9 +1,40 @@ # 3-B1. int128 -入力からint型の非負整数値を1つ受け取り、$10^{25}$倍して出力しよう。 +入力から`int`型の非負整数値を1つ受け取り、$10^{25}$倍して出力しよう。 -:::spoiler Answer -この問題では、出力は常に$10^{25}$以上となるため、通常のint型を使うとオーバーフローしてしまう。 +### 入力/出力例 + +:::info 例1 + +:::spoiler クリックして展開 + +**入力** + +``` +5 +``` + +**出力** + +``` +50000000000000000000000000 +``` + +::: + +### ヒント + +:::tip ヒント1 + +::: spoiler クリックして展開 +この問題では出力は常に$10^{25}$以上となるため、通常の`int`型を使うとオーバーフローしてしまいます。数値ではなく、別の方法で扱うことはできないでしょうか...? +::: + +### 解答例 + +:::danger 解答例1 + +:::spoiler クリックして展開 ```cpp #include @@ -12,6 +43,8 @@ using namespace std; int main() { int input_number; cin >> input_number; + + // 文字列として必要な0を追加することでオーバーフローを回避 cout << input_number << "0000000000000000000000000" << endl; } ``` @@ -20,6 +53,6 @@ int main() { :::spoiler 実は... -Clang++やG++などの一部のコンパイラは、int128型\(__int128)という\(通常の)int型より大きい値を扱うことが出来る型に対応しているため、今回の問題を掛け算として解くことができる。 +Clang++やG++などの一部のコンパイラは`int128`型\(`__int128`)という通常の`int`型より大きい値を扱うことが出来る型に対応しているため、今回の問題を掛け算として解くことができる。 ::: From 19515672090969e63025f7910724e31dde199580 Mon Sep 17 00:00:00 2001 From: nuskey8 <84110981+nuskey8@users.noreply.github.com> Date: Fri, 2 May 2025 22:22:50 +0900 Subject: [PATCH 3/9] =?UTF-8?q?=E4=BE=8B=E3=81=AE=E3=83=8A=E3=83=B3?= =?UTF-8?q?=E3=83=90=E3=83=AA=E3=83=B3=E3=82=B0=E3=81=AE=E3=83=9F=E3=82=B9?= =?UTF-8?q?=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/text/chapter-2/practice/sum.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/text/chapter-2/practice/sum.md b/docs/text/chapter-2/practice/sum.md index e5f40d6b..25512ea8 100644 --- a/docs/text/chapter-2/practice/sum.md +++ b/docs/text/chapter-2/practice/sum.md @@ -24,7 +24,7 @@ cin で自然数 $n$ を受け取って、$1$ から $n$ までの和を出力 ::: -:::info 例1 +:::info 例2 :::spoiler クリックして展開 From 09cdbaa6c77f109895a7ae1d16447cd4ff00fae4 Mon Sep 17 00:00:00 2001 From: nuskey8 <84110981+nuskey8@users.noreply.github.com> Date: Fri, 2 May 2025 22:55:12 +0900 Subject: [PATCH 4/9] =?UTF-8?q?=E6=BC=94=E7=BF=92=E5=95=8F=E9=A1=8C?= =?UTF-8?q?=E3=83=9A=E3=83=BC=E3=82=B8=E3=81=AE=E6=94=B9=E5=96=84=20(chapt?= =?UTF-8?q?er-4/practice)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/text/chapter-4/practice/do-not-fail.md | 59 +++++++++++++- docs/text/chapter-4/practice/fibonatti.md | 77 +++++++++++++++++-- docs/text/chapter-4/practice/fizz-buzz-2d.md | 34 +++++--- .../text/chapter-4/practice/lower-or-upper.md | 63 +++++++++++++-- .../practice/divide-each-difficulty.md | 2 + 5 files changed, 210 insertions(+), 25 deletions(-) diff --git a/docs/text/chapter-4/practice/do-not-fail.md b/docs/text/chapter-4/practice/do-not-fail.md index d16ecb98..c8ffb412 100644 --- a/docs/text/chapter-4/practice/do-not-fail.md +++ b/docs/text/chapter-4/practice/do-not-fail.md @@ -1,24 +1,79 @@ # DO NOT FAIL + 入力された複数の点数を受け取って、59点以下なら`Failed`と出力しよう。また、`-1`が入力されたら`Passed!`と出力して終了しよう。 -::: spoiler Answer +### 入力/出力例 + +:::info 例1 + +:::spoiler クリックして展開 + +**入力** + +``` +59 +72 +31 +-1 +``` + +**出力** + +``` +Failed +Failed +Passed! +``` + +> 72の入力に対しては出力を行いません。 +::: + +### ヒント + + +:::tip ヒント1 + +:::spoiler クリックして展開 +`while (true)`とすることで、明示的に`break`しない限り終了しないループを実装することができます。 + +```cpp +// これは絶対に終了しない (無限ループ) +while(true) { +} + +while(true) { + // 適当な条件でbreakを実行することでループを抜けることが可能 + if (some_condition) { + break; + } +} +``` +::: + +### 解答例 + +:::danger 解答例1 + +:::spoiler クリックして展開 ```cpp #include -#include using namespace std; int main() { while(true) { int score; cin >> score; + if (score == -1) { cout << "Passed!" << endl; break; } + if (score < 60) { cout << "Failed" << endl; } } + return 0; } ``` diff --git a/docs/text/chapter-4/practice/fibonatti.md b/docs/text/chapter-4/practice/fibonatti.md index 6bf35e91..53b8a923 100644 --- a/docs/text/chapter-4/practice/fibonatti.md +++ b/docs/text/chapter-4/practice/fibonatti.md @@ -4,20 +4,76 @@ ただし、フィボナッチ数列は $\{1,1,2,...\}$ とします。 -:::spoiler Hint 1 -$F_{n}=F_{n-1}+F_{n-2}$をfor文で計算しよう。 +### 入力/出力例 + +:::info 例1 + +:::spoiler クリックして展開 + +**入力** + +``` +4 +``` + +**出力** + +``` +3 +``` + +> $F_4 = 3$ + ::: -:::spoiler Hint 2 +:::info 例2 + +:::spoiler クリックして展開 + +**入力** + +``` +6 +``` + +**出力** + +``` +8 +``` + +> $F_6 = 8$ + +::: + + +### ヒント + +:::tip ヒント1 + +:::spoiler クリックして展開 +$F_{n}=F_{n-1}+F_{n-2}$を`for`文で計算しよう。 +::: + +:::tip ヒント2 + +:::spoiler クリックして展開 $F_{n-1}$ と $F_{n-2}$を持つ変数`latest`、`second_latest`を作り、ループの中で漸化式を満たすように更新していこう。 ::: -:::spoiler Hint 3 -`latest`と`second_latest`を同時に更新することはできないので、一時的な変数`next`も使おう。 +:::tip ヒント3 + +:::spoiler クリックして展開 +`latest`と`second_latest`を同時に更新することはできないので、一時的な変数(`next`など)を使って保持しておこう。 ::: -:::spoiler Answer +### 解答例 + +:::danger 解答例1 + +:::spoiler クリックして展開 for文を使うことでフィボナッチ数列の$N$番目を求めることができる。 + ```cpp #include using namespace std; @@ -29,6 +85,8 @@ int main() { for (int i = 2; i <= n; i++) { // i番目を計算 int next = second_latest + latest; + + // 最新の値を更新 second_latest = latest; latest = next; } @@ -36,7 +94,12 @@ int main() { } ``` -別解: `.push_back`を用いて、フィボナッチ数列の各値を配列に格納していく方法もあります。 +::: + +:::danger 解答例2 + +:::spoiler クリックして展開 +`.push_back`を用いて、フィボナッチ数列の各値を配列に格納していく方法もあります。 ```cpp #include diff --git a/docs/text/chapter-4/practice/fizz-buzz-2d.md b/docs/text/chapter-4/practice/fizz-buzz-2d.md index 1c48799d..b72cc5d6 100644 --- a/docs/text/chapter-4/practice/fizz-buzz-2d.md +++ b/docs/text/chapter-4/practice/fizz-buzz-2d.md @@ -1,4 +1,5 @@ # fizz-buzz 2D + 整数 $H, W$ が渡されるので、$H\times W$ の二次元配列 $a_{i,j}\ (1\leq i\leq H, 1\leq j\leq W)$ を出力しよう。 ただし、$a_{i,j}$ は @@ -8,13 +9,21 @@ - $i$ は3の倍数でなく、$j$ が5の倍数のとき、`Bu` (文字列) - $i$ が3の倍数で、$j$ が5の倍数のとき、`FB` (文字列) -### 出力例 +### 入力/出力例 + +:::info 例1 + +:::spoiler クリックして展開 -入力 `7 6` に対する出力の例 +**入力** + +``` +7 6 +``` -$i$ 行 $j$ 列に $a_{i,j}$ を出力している。 +**出力** -```text +``` 1 2 3 4 Bu 6 2 4 6 8 Bu 12 Fi Fi Fi Fi FB Fi @@ -24,12 +33,16 @@ Fi Fi Fi Fi FB Fi 7 14 21 28 Bu 42 ``` +> $i$ 行 $j$ 列に $a_{i,j}$ を出力している。 + +--- + :::tip 出力の幅を揃える方法 -数字 ( $i\times j$ ) や 文字 (`Fi`, `Bu`, `FB`) を出力した後に `\t` を出力すると、数字や文字が良い感じにそろいます。 +数字 ( $i\times j$ ) や 文字 (`Fi`, `Bu`, `FB`) を出力した後に `\t` を出力すると数字や文字を揃えることができます。 + +例えば、以下のコードで上記のような出力例を再現できます。 -例えば、以下のコードで上記のような出力例を再現できる。 ```cpp -#include #include using namespace std; @@ -45,9 +58,12 @@ int main() { ``` ::: -:::spoiler Answer +### 解答例 + +:::danger 解答例1 + +:::spoiler クリックして展開 ```cpp -#include #include using namespace std; diff --git a/docs/text/chapter-4/practice/lower-or-upper.md b/docs/text/chapter-4/practice/lower-or-upper.md index bbedc409..84c06e6b 100644 --- a/docs/text/chapter-4/practice/lower-or-upper.md +++ b/docs/text/chapter-4/practice/lower-or-upper.md @@ -1,14 +1,61 @@ # lower or UPPER -アルファベット1文字が渡されたとき、それが大文字なら"UPPERCASE"、小文字なら"lowercase"と出力しよう -::: spoiler Hint -`char`型は1byteの整数値のため、互いに大小関係がある。 +アルファベット1文字が渡されたとき、それが大文字なら"UPPERCASE"、小文字なら"lowercase"と出力しよう。 + +### 入力/出力例 + +:::info 例1 + +:::spoiler クリックして展開 + +**入力** + +``` +a +``` + +**出力** + +``` +lowercase +``` + ::: -::: spoiler Answer -`char`型は`<`、`>`、`<=`、`>=`などで大小を比較することができる。 +:::info 例2 + +:::spoiler クリックして展開 + +**入力** + +``` +B +``` + +**出力** + +``` +UPPERCASE +``` + +::: + +### ヒント + +:::tip ヒント1 + +:::spoiler クリックして展開 +`char`型は1byteの整数値のため、互いに大小関係があります。ASCIIコードの話を思い出してみましょう。 +::: + +### 解答例 + +:::danger 解答例1 + +::: spoiler クリックして展開 +`char`型は各文字コードに対応する整数値のため、`<`、`>`、`<=`、`>=`などで大小を比較することができます。 + ```cpp -#include #include using namespace std; @@ -22,4 +69,6 @@ int main() { cout << "UPPERCASE" << endl; } return 0; -} \ No newline at end of file +} +``` +::: \ No newline at end of file diff --git a/docs/text/chapter-5/practice/divide-each-difficulty.md b/docs/text/chapter-5/practice/divide-each-difficulty.md index bbb1a8ae..97c4ea6a 100644 --- a/docs/text/chapter-5/practice/divide-each-difficulty.md +++ b/docs/text/chapter-5/practice/divide-each-difficulty.md @@ -1,5 +1,7 @@ # Divide each difficulty + 以下の$n \leq 7$を受け取って$n \times n$の行列$a_{i,j}=Fibonatti_{ij}$を出力するプログラムの、フィボナッチ数列の解を求める部分を別の関数`int fibonatti(int index);`に分離してみよう。 + ```cpp:line-numbers #include using namespace std; From d0ef2f49774fb26c23e4b7ce011cea554adfb13a Mon Sep 17 00:00:00 2001 From: nuskey8 <84110981+nuskey8@users.noreply.github.com> Date: Fri, 2 May 2025 23:06:28 +0900 Subject: [PATCH 5/9] =?UTF-8?q?=E6=BC=94=E7=BF=92=E5=95=8F=E9=A1=8C?= =?UTF-8?q?=E3=83=9A=E3=83=BC=E3=82=B8=E3=81=AE=E6=94=B9=E5=96=84=20(chapt?= =?UTF-8?q?er-5/practice)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../chapter-5/practice/divide-each-difficulty.md | 14 ++++++++++++-- docs/text/chapter-5/practice/plus-equal.md | 12 ++++++++++-- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/docs/text/chapter-5/practice/divide-each-difficulty.md b/docs/text/chapter-5/practice/divide-each-difficulty.md index 97c4ea6a..c7ca0179 100644 --- a/docs/text/chapter-5/practice/divide-each-difficulty.md +++ b/docs/text/chapter-5/practice/divide-each-difficulty.md @@ -27,8 +27,14 @@ int main() { } ``` -::: spoiler Hint +### ヒント + +:::tip ヒント1 + +::: spoiler クリックして展開 + 下のコードの`// ここにフィボナッチ数列の計算を実装しよう`の部分を実装してみよう。 + ```cpp:line-numbers #include using namespace std; @@ -53,7 +59,11 @@ int main() { ``` ::: -::: spoiler Answer +### 解答例 + +:::danger 解答例1 + +:::spoiler クリックして展開 ```cpp:line-numbers #include diff --git a/docs/text/chapter-5/practice/plus-equal.md b/docs/text/chapter-5/practice/plus-equal.md index 05edf413..703b6fb8 100644 --- a/docs/text/chapter-5/practice/plus-equal.md +++ b/docs/text/chapter-5/practice/plus-equal.md @@ -1,4 +1,5 @@ # Operator+= + `int`型の`a`と`b`について`a`に`b`を足す操作である ```cpp @@ -7,11 +8,18 @@ a += b; で用いる`+=`演算子と同じ働きをする関数を書こう。 -::: spoiler Hint 1 +### ヒント + +::: tip ヒント1 + +::: spoiler クリックして展開 `a`を参照渡しで受け取ることで、`a`の値を書き換えることができる。 ::: -::: spoiler Answer +### 解答例 + +::: danger 解答例1 +::: spoiler クリックして展開 ```cpp:line-numbers void compound_assigned_plus(int& lhs, int rhs) { lhs = lhs + rhs; From b0ffb5974f9b7e0735ca04cf0b88e76644a02be7 Mon Sep 17 00:00:00 2001 From: nuskey8 <84110981+nuskey8@users.noreply.github.com> Date: Fri, 2 May 2025 23:18:10 +0900 Subject: [PATCH 6/9] =?UTF-8?q?=E6=BC=94=E7=BF=92=E5=95=8F=E9=A1=8C?= =?UTF-8?q?=E3=83=9A=E3=83=BC=E3=82=B8=E3=81=AE=E6=94=B9=E5=96=84=20(chapt?= =?UTF-8?q?er-6/practice)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/text/chapter-6/practice/order.md | 57 ++++++++++++++++++++------- 1 file changed, 43 insertions(+), 14 deletions(-) diff --git a/docs/text/chapter-6/practice/order.md b/docs/text/chapter-6/practice/order.md index e5703f22..2c83fa5b 100644 --- a/docs/text/chapter-6/practice/order.md +++ b/docs/text/chapter-6/practice/order.md @@ -16,8 +16,6 @@ 1. 番号が与えられたときに、その商品の名前、値段、スペックを表示する。 2. 値段が与えられたときに、その**値段以下**の全ての商品の名前、値段、スペックをすべて表示する。 - - ```cpp:line-numbers #include #include @@ -30,37 +28,58 @@ struct Item { int main() { vector items = { Item{5000, "机", "それなり"}, - ... + // ここにアイテムを追加 }; // ここに 1番 2番を 解けるプログラムを書く } ``` -## 入出力例 -```text -[Input 1] +### 入力/出力例 + +:::info 例1 + +:::spoiler クリックして展開 + +**入力** + +``` 1 0 ``` -```text -[Output 1] +**出力** + +``` 机 5000 それなり ``` -```text -[Input 2] +::: + +:::info 例2 + +:::spoiler クリックして展開 + +**入力** + +``` 2 100001 ``` -```txt -[Output 2] +**出力** + +``` 机 5000 それなり チョコ 100 おいしい 安いPC 100000 たかい ``` -::: spoiler Hint +::: + +### ヒント + +::: tip ヒント1 + +::: spoiler クリックして展開 `Item`構造体を宣言して、以下のメンバー変数とメソッドを実装しよう。 - `price`(`int`型) - `name`(`string`型) @@ -68,7 +87,17 @@ int main() { - `print`メソッド ::: -::: spoiler Answer +::: tip ヒント2 + +::: spoiler クリックして展開 +クエリとして入力される`1`または`2`の値に応じて、条件に合致するアイテムの情報を出力しよう。 +::: + +### 解答例 + +::: danger 解答例1 + +::: spoiler クリックして展開 ```cpp:line-numbers #include #include From ef398b30b2a93789b30b4c4f35b278ff072452cb Mon Sep 17 00:00:00 2001 From: nuskey8 <84110981+nuskey8@users.noreply.github.com> Date: Fri, 2 May 2025 23:38:00 +0900 Subject: [PATCH 7/9] =?UTF-8?q?=E6=BC=94=E7=BF=92=E5=95=8F=E9=A1=8C?= =?UTF-8?q?=E3=83=9A=E3=83=BC=E3=82=B8=E3=81=AE=E6=94=B9=E5=96=84=20(chapt?= =?UTF-8?q?er-7,=208/practice)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/text/chapter-7/practice/sort.md | 8 ++++++-- docs/text/chapter-8/practice/capsulate-user.md | 13 ++++++++++--- docs/text/chapter-8/practice/exponentation.md | 11 ++++++++--- 3 files changed, 24 insertions(+), 8 deletions(-) diff --git a/docs/text/chapter-7/practice/sort.md b/docs/text/chapter-7/practice/sort.md index af7b7105..96d39ba0 100644 --- a/docs/text/chapter-7/practice/sort.md +++ b/docs/text/chapter-7/practice/sort.md @@ -33,7 +33,10 @@ int main() { 結果を考えてみたらコピーして実行してみましょう。 -::: spoiler 解答 +### 解答例 + +::: danger 解答例1 +::: spoiler クリックして展開 ```txt -400 @@ -52,6 +55,7 @@ int main() { このループを繰り返すことで、ソートすることができます。 -::: tip +--- + これはバブルソート ([バブルソート: wikipedia](https://ja.wikipedia.org/wiki/バブルソート))と呼ばれ一番基本的なソートアルゴリズムと知られています。ただし、計算量 $O(n^2)$ で効率が悪いです。(オーダー記法は 8 章の [計算量と実行時間](../../chapter-8/complexity.md) を参照。) ::: diff --git a/docs/text/chapter-8/practice/capsulate-user.md b/docs/text/chapter-8/practice/capsulate-user.md index 57ead137..298bc35e 100644 --- a/docs/text/chapter-8/practice/capsulate-user.md +++ b/docs/text/chapter-8/practice/capsulate-user.md @@ -4,9 +4,12 @@ <<<@/text/chapter-6/struct.cpp#define{cpp:line-numbers} +### 解答例 -::: spoiler Answer -値の設定をするメンバ関数と取得をするメンバ関数(それぞれ、setter,getterと呼ばれます)を用意すると、隠蔽されたメンバ変数へアクセスすることができる。 +::: danger 解答例1 + +::: spoiler クリックして展開 +値の設定をするメンバ関数と取得をするメンバ関数(それぞれsetter/getterと呼ばれます)を用意すると、隠蔽されたメンバ変数へアクセスすることができる。 ```cpp:line-numbers // setter, getterを用いた実装 #include @@ -46,9 +49,13 @@ class CapsulatedMember { return grade; } }; +::: -``` +::: danger 解答例2 + +::: spoiler クリックして展開 メンバ変数の参照を返すメンバ関数でも良い。 + ```cpp:line-numbers // 参照渡しを用いた実装 #include diff --git a/docs/text/chapter-8/practice/exponentation.md b/docs/text/chapter-8/practice/exponentation.md index 6984b373..112ed563 100644 --- a/docs/text/chapter-8/practice/exponentation.md +++ b/docs/text/chapter-8/practice/exponentation.md @@ -6,7 +6,6 @@ $c \equiv a ^ b \mod{M} | 0 \leq c < M$ を満たす$c$を、再帰関数を使って出力しよう。 - - 基礎課題 - $2 \leq a < 10^4$ @@ -18,8 +17,11 @@ $c \equiv a ^ b \mod{M} | 0 \leq c < M$ - $0 \leq b < 10^{18}$ - $M = 998244353$ +### 解答例 + +:::danger 解答例 - 基礎課題 -:::spoiler Answer 基礎課題 +:::spoiler クリックして展開 ```cpp // 愚直な再帰関数を用いた実装 @@ -43,7 +45,10 @@ int main() { ``` ::: -:::spoiler Answer 発展課題 +:::danger 解答例 - 発展課題 + +:::spoiler クリックして展開 + ```cpp // メモ化再帰を用いたダブリングの実装 #include From 2242c9d76401b5c79a72a115c39837a5087e4637 Mon Sep 17 00:00:00 2001 From: nuskey8 <84110981+nuskey8@users.noreply.github.com> Date: Fri, 2 May 2025 23:41:01 +0900 Subject: [PATCH 8/9] =?UTF-8?q?=E6=BC=94=E7=BF=92=E5=95=8F=E9=A1=8C?= =?UTF-8?q?=E3=83=9A=E3=83=BC=E3=82=B8=E3=81=AE=E6=94=B9=E5=96=84=20(chapt?= =?UTF-8?q?er-1/practice)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/text/chapter-1/practice/hello-shell.md | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/docs/text/chapter-1/practice/hello-shell.md b/docs/text/chapter-1/practice/hello-shell.md index cd7848c7..d7a9f38e 100644 --- a/docs/text/chapter-1/practice/hello-shell.md +++ b/docs/text/chapter-1/practice/hello-shell.md @@ -71,7 +71,11 @@ cat index.txt ::: -::: spoiler hint 1 +### ヒント + +::: tip ヒント1 + +::: spoiler クリックして展開 ファイルの検索は `find` コマンドを使います。 `man find` で find コマンドについて調べることができます。ただし英語。 @@ -81,20 +85,28 @@ cat index.txt ::: -::: spoiler hint 2 +::: tip ヒント2 + +::: spoiler クリックして展開 `find . -name [探したいファイル]` で調べられます。 `*` を使うと、曖昧検索ができます。 `code-*` と書くと、 `code-` で始まるファイルを検索できます。 ::: -::: spoiler hint 3 +::: tip ヒント3 + +::: spoiler クリックして展開 - `find . -name '*.txt'` でファイルを見つけることができます。 - `cat [FILE]` でファイルを開くことができます。 `TAB` キーを押すと、候補を選んでくれます。 ::: -::: spoiler answer +### 解答 + +::: danger 解答 + +::: spoiler クリックして展開 `cat 6db1b5a2e7/08dc869896/memo.txt` でファイルを開いてみましょう。 From 471f368415a8bd24b25c77729c291e70717f7568 Mon Sep 17 00:00:00 2001 From: nuskey8 <84110981+nuskey8@users.noreply.github.com> Date: Sat, 3 May 2025 01:00:59 +0900 Subject: [PATCH 9/9] =?UTF-8?q?tip=20->=20details,=20danger=20->=20tip?= =?UTF-8?q?=E3=81=AB=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/text/chapter-1/practice/hello-shell.md | 8 ++--- docs/text/chapter-2/practice/4bit.md | 29 +++++-------------- .../text/chapter-2/practice/multiplication.md | 11 +++---- docs/text/chapter-2/practice/sum.md | 21 +++++--------- .../chapter-3/practice/de-morgans-laws.md | 17 ++++------- docs/text/chapter-3/practice/echo.md | 17 ++++------- docs/text/chapter-3/practice/fraction.md | 20 ++++--------- docs/text/chapter-3/practice/int128.md | 16 +++++----- docs/text/chapter-4/practice/do-not-fail.md | 12 +++----- docs/text/chapter-4/practice/fibonatti.md | 28 ++++++------------ docs/text/chapter-4/practice/fizz-buzz-2d.md | 10 +++---- .../text/chapter-4/practice/lower-or-upper.md | 14 +++------ .../practice/divide-each-difficulty.md | 8 ++--- docs/text/chapter-5/practice/plus-equal.md | 6 ++-- docs/text/chapter-6/practice/order.md | 18 ++++-------- docs/text/chapter-7/practice/sort.md | 2 +- .../text/chapter-8/practice/capsulate-user.md | 4 +-- docs/text/chapter-8/practice/exponentation.md | 8 ++--- 18 files changed, 85 insertions(+), 164 deletions(-) diff --git a/docs/text/chapter-1/practice/hello-shell.md b/docs/text/chapter-1/practice/hello-shell.md index d7a9f38e..63bc070c 100644 --- a/docs/text/chapter-1/practice/hello-shell.md +++ b/docs/text/chapter-1/practice/hello-shell.md @@ -73,7 +73,7 @@ cat index.txt ### ヒント -::: tip ヒント1 +::: info ヒント1 ::: spoiler クリックして展開 @@ -85,7 +85,7 @@ cat index.txt ::: -::: tip ヒント2 +::: info ヒント2 ::: spoiler クリックして展開 @@ -93,7 +93,7 @@ cat index.txt ::: -::: tip ヒント3 +::: info ヒント3 ::: spoiler クリックして展開 @@ -104,7 +104,7 @@ cat index.txt ### 解答 -::: danger 解答 +::: tip 解答 ::: spoiler クリックして展開 diff --git a/docs/text/chapter-2/practice/4bit.md b/docs/text/chapter-2/practice/4bit.md index 413d3c58..98639f33 100644 --- a/docs/text/chapter-2/practice/4bit.md +++ b/docs/text/chapter-2/practice/4bit.md @@ -4,9 +4,7 @@ ### 入力/出力例 -:::info 例1 - -:::spoiler クリックして展開 +::: details 例1 **入力** @@ -22,9 +20,7 @@ ::: -:::info 例2 - -:::spoiler クリックして展開 +::: details 例2 **入力** @@ -42,38 +38,29 @@ ### ヒント -:::tip ヒント1 - -:::spoiler クリックして展開 +::: details ヒント1 `int`型では、`5 / 3`は`1`になる。 ::: - -:::tip ヒント2 - -:::spoiler クリックして展開 +::: details ヒント2 整数型の余りは`%`で得ることができる。 ::: -:::tip ヒント3 - -:::spoiler クリックして展開 +::: details ヒント3 1桁ずつ出力してみよう。 ::: -:::tip ヒント4 - -:::spoiler クリックして展開 +::: details ヒント4 $\displaystyle\left\lfloor\frac{n}{2^k}\right\rfloor$を2進数表記すると、$n$の2進数表記の$k+1$桁目以上を得ることができる。 ::: ### 解答例 -:::danger 解答例1 +::: tip 解答例1 -:::spoiler クリックして展開 +::: spoiler クリックして展開 ```cpp #include using namespace std; diff --git a/docs/text/chapter-2/practice/multiplication.md b/docs/text/chapter-2/practice/multiplication.md index 784f75f9..dc3d3f64 100644 --- a/docs/text/chapter-2/practice/multiplication.md +++ b/docs/text/chapter-2/practice/multiplication.md @@ -4,9 +4,7 @@ cinでint型の整数を2つ受け取って、その積をターミナルに出 ### 入力/出力例 -:::info 例1 - -:::spoiler クリックして展開 +::: details 例1 **入力** @@ -24,9 +22,8 @@ cinでint型の整数を2つ受け取って、その積をターミナルに出 ### ヒント -:::tip ヒント1 +::: details ヒント1 -:::spoiler クリックして展開 2つの値を入力から受け取るには、 ```cpp cin >> first_value >> second_value; @@ -35,9 +32,9 @@ cin >> first_value >> second_value; ### 解答例 -:::danger 解答例1 +::: tip 解答例1 -:::spoiler クリックして展開 +::: spoiler クリックして展開 ```cpp #include diff --git a/docs/text/chapter-2/practice/sum.md b/docs/text/chapter-2/practice/sum.md index 25512ea8..0b82538e 100644 --- a/docs/text/chapter-2/practice/sum.md +++ b/docs/text/chapter-2/practice/sum.md @@ -4,9 +4,7 @@ cin で自然数 $n$ を受け取って、$1$ から $n$ までの和を出力 ### 入力/出力例 -:::info 例1 - -:::spoiler クリックして展開 +::: details 例1 **入力** @@ -24,9 +22,7 @@ cin で自然数 $n$ を受け取って、$1$ から $n$ までの和を出力 ::: -:::info 例2 - -:::spoiler クリックして展開 +::: details 例2 **入力** @@ -46,21 +42,18 @@ cin で自然数 $n$ を受け取って、$1$ から $n$ までの和を出力 ### ヒント -:::tip ヒント1 +::: details ヒント1 -:::spoiler クリックして展開 実際に計算する際にどのような手順で行うかを考えてみましょう。100までの総和などは1つずつ足していくのではなく、なんらかの方法でもっと簡単に求めていたはずです。 ::: -:::tip ヒント2 +::: details ヒント2 -::: spoiler クリックして展開 総和を求める公式は $\dfrac{1}{2} n (n+1)$ でした。 ::: -:::tip ヒント3 (なぜか計算が合わない人へ) +::: details ヒント3 (なぜか計算が合わない人へ) -::: spoiler クリックして展開 プログラムにおいては、計算は左から順番に行われ、途中計算は必ず `int` 型(=整数)に切り捨てられます。つまり、最初に `1/2` と書くとそこで 0 になってしまいます。 計算の順序を工夫する必要がありそうです。 @@ -68,9 +61,9 @@ cin で自然数 $n$ を受け取って、$1$ から $n$ までの和を出力 ### 解答例 -:::danger 解答例1 +::: tip 解答例1 -:::spoiler クリックして展開 +::: spoiler クリックして展開 ```cpp #include diff --git a/docs/text/chapter-3/practice/de-morgans-laws.md b/docs/text/chapter-3/practice/de-morgans-laws.md index c1182c97..d0497f90 100644 --- a/docs/text/chapter-3/practice/de-morgans-laws.md +++ b/docs/text/chapter-3/practice/de-morgans-laws.md @@ -10,14 +10,11 @@ $\lnot(P \lor Q) \Leftrightarrow \lnot P \land \lnot Q$ ::: - ### 入力/出力例 以下の例では上のド・モルガンの法則の式の1つ目を`case 1`、2つ目を`case 2`としてコード内でチェックを行い、左辺と右辺の結果が一致している場合は`ok`と出力します。 -:::info 例1 - -:::spoiler クリックして展開 +::: details 例1 **入力** @@ -36,15 +33,11 @@ case 2: ok ### ヒント -:::tip ヒント1 - -:::spoiler クリックして展開 +::: details ヒント1 PとQが文字列として与えられるため、まずは`string`型で入力を受け取り、その値をチェックして`bool`型に変換しましょう。`==`演算子を用いればできるはず。 ::: -:::tip ヒント2 - -:::spoiler クリックして展開 +::: details ヒント2 受け取った文字列を比較し、`"true"`と比較した結果を`bool`型の変数に代入しましょう。 ```cpp @@ -56,9 +49,9 @@ bool p = p_string == "true"; ### 解答例 -:::danger 解答例1 +::: tip 解答例1 -:::spoiler クリックして展開 +::: spoiler クリックして展開 ```cpp #include diff --git a/docs/text/chapter-3/practice/echo.md b/docs/text/chapter-3/practice/echo.md index e79a0339..44e87cef 100644 --- a/docs/text/chapter-3/practice/echo.md +++ b/docs/text/chapter-3/practice/echo.md @@ -4,9 +4,7 @@ ### 入力/出力例 -:::info 例1 - -:::spoiler クリックして展開 +::: details 例1 **入力** @@ -24,18 +22,16 @@ Hello! ### ヒント -:::tip ヒント1 +::: details ヒント1 -:::spoiler クリックして展開 文字列型の変数を使うには、 ```cpp string s; ``` ::: -:::tip ヒント2 +::: details ヒント2 -:::spoiler クリックして展開 もしもこんなエラーが出たとしたら、 ``` ./Main.cpp:4:5: error: unknown type name 'string'; did you mean 'std::string'? @@ -50,17 +46,16 @@ using namespace std; で、`std::`を省略できるようにしよう。 ::: -:::tip ヒント3 +::: details ヒント3 -:::spoiler クリックして展開 入力を受け取るには`cin`を、出力するには`cout`を使おう。 ::: ### 解答例 -:::danger 解答例1 +::: tip 解答例1 -:::spoiler クリックして展開 +::: spoiler クリックして展開 ```cpp #include diff --git a/docs/text/chapter-3/practice/fraction.md b/docs/text/chapter-3/practice/fraction.md index 76c47126..45357ed6 100644 --- a/docs/text/chapter-3/practice/fraction.md +++ b/docs/text/chapter-3/practice/fraction.md @@ -6,9 +6,7 @@ ### 入力/出力例 -:::info 例1 - -:::spoiler クリックして展開 +::: details 例1 **入力** @@ -26,9 +24,7 @@ ::: -:::info 例2 - -:::spoiler クリックして展開 +::: details 例2 **入力** @@ -46,9 +42,7 @@ ::: -:::info 例3 - -:::spoiler クリックして展開 +::: details 例3 **入力** @@ -67,17 +61,15 @@ ### ヒント -:::tip ヒント1 - -::: spoiler クリックして展開 +::: details ヒント1 今回は約分が必要ないので、最小公倍数を求める必要はありません。素直に掛け算で分母を求めてしまってよいでしょう。 ::: ### 解答例 -:::danger 解答例1 +::: tip 解答例1 -:::spoiler クリックして展開 +::: spoiler クリックして展開 ```cpp #include using namespace std; diff --git a/docs/text/chapter-3/practice/int128.md b/docs/text/chapter-3/practice/int128.md index b049b3b5..e4174aeb 100644 --- a/docs/text/chapter-3/practice/int128.md +++ b/docs/text/chapter-3/practice/int128.md @@ -4,9 +4,7 @@ ### 入力/出力例 -:::info 例1 - -:::spoiler クリックして展開 +::: details 例1 **入力** @@ -24,17 +22,15 @@ ### ヒント -:::tip ヒント1 - -::: spoiler クリックして展開 +::: details ヒント1 この問題では出力は常に$10^{25}$以上となるため、通常の`int`型を使うとオーバーフローしてしまいます。数値ではなく、別の方法で扱うことはできないでしょうか...? ::: ### 解答例 -:::danger 解答例1 +::: tip 解答例1 -:::spoiler クリックして展開 +::: spoiler クリックして展開 ```cpp #include @@ -51,7 +47,9 @@ int main() { ::: -:::spoiler 実は... +::: tip 実は... + +::: spoiler クリックして展開 Clang++やG++などの一部のコンパイラは`int128`型\(`__int128`)という通常の`int`型より大きい値を扱うことが出来る型に対応しているため、今回の問題を掛け算として解くことができる。 diff --git a/docs/text/chapter-4/practice/do-not-fail.md b/docs/text/chapter-4/practice/do-not-fail.md index c8ffb412..734ee482 100644 --- a/docs/text/chapter-4/practice/do-not-fail.md +++ b/docs/text/chapter-4/practice/do-not-fail.md @@ -4,9 +4,7 @@ ### 入力/出力例 -:::info 例1 - -:::spoiler クリックして展開 +::: details 例1 **入力** @@ -31,9 +29,7 @@ Passed! ### ヒント -:::tip ヒント1 - -:::spoiler クリックして展開 +::: details ヒント1 `while (true)`とすることで、明示的に`break`しない限り終了しないループを実装することができます。 ```cpp @@ -52,9 +48,9 @@ while(true) { ### 解答例 -:::danger 解答例1 +::: tip 解答例1 -:::spoiler クリックして展開 +::: spoiler クリックして展開 ```cpp #include using namespace std; diff --git a/docs/text/chapter-4/practice/fibonatti.md b/docs/text/chapter-4/practice/fibonatti.md index 53b8a923..e0031964 100644 --- a/docs/text/chapter-4/practice/fibonatti.md +++ b/docs/text/chapter-4/practice/fibonatti.md @@ -6,9 +6,7 @@ ### 入力/出力例 -:::info 例1 - -:::spoiler クリックして展開 +::: details 例1 **入力** @@ -26,9 +24,7 @@ ::: -:::info 例2 - -:::spoiler クリックして展開 +::: details 例2 **入力** @@ -49,29 +45,23 @@ ### ヒント -:::tip ヒント1 - -:::spoiler クリックして展開 +::: details ヒント1 $F_{n}=F_{n-1}+F_{n-2}$を`for`文で計算しよう。 ::: -:::tip ヒント2 - -:::spoiler クリックして展開 +::: details ヒント2 $F_{n-1}$ と $F_{n-2}$を持つ変数`latest`、`second_latest`を作り、ループの中で漸化式を満たすように更新していこう。 ::: -:::tip ヒント3 - -:::spoiler クリックして展開 +::: details ヒント3 `latest`と`second_latest`を同時に更新することはできないので、一時的な変数(`next`など)を使って保持しておこう。 ::: ### 解答例 -:::danger 解答例1 +::: tip 解答例1 -:::spoiler クリックして展開 +::: spoiler クリックして展開 for文を使うことでフィボナッチ数列の$N$番目を求めることができる。 ```cpp @@ -96,9 +86,9 @@ int main() { ::: -:::danger 解答例2 +::: tip 解答例2 -:::spoiler クリックして展開 +::: spoiler クリックして展開 `.push_back`を用いて、フィボナッチ数列の各値を配列に格納していく方法もあります。 ```cpp diff --git a/docs/text/chapter-4/practice/fizz-buzz-2d.md b/docs/text/chapter-4/practice/fizz-buzz-2d.md index b72cc5d6..549c5de4 100644 --- a/docs/text/chapter-4/practice/fizz-buzz-2d.md +++ b/docs/text/chapter-4/practice/fizz-buzz-2d.md @@ -11,9 +11,7 @@ ### 入力/出力例 -:::info 例1 - -:::spoiler クリックして展開 +::: details 例1 **入力** @@ -37,7 +35,7 @@ Fi Fi Fi Fi FB Fi --- -:::tip 出力の幅を揃える方法 +::: tip 出力の幅を揃える方法 数字 ( $i\times j$ ) や 文字 (`Fi`, `Bu`, `FB`) を出力した後に `\t` を出力すると数字や文字を揃えることができます。 例えば、以下のコードで上記のような出力例を再現できます。 @@ -60,9 +58,9 @@ int main() { ### 解答例 -:::danger 解答例1 +::: tip 解答例1 -:::spoiler クリックして展開 +::: spoiler クリックして展開 ```cpp #include using namespace std; diff --git a/docs/text/chapter-4/practice/lower-or-upper.md b/docs/text/chapter-4/practice/lower-or-upper.md index 84c06e6b..c19a103f 100644 --- a/docs/text/chapter-4/practice/lower-or-upper.md +++ b/docs/text/chapter-4/practice/lower-or-upper.md @@ -4,9 +4,7 @@ ### 入力/出力例 -:::info 例1 - -:::spoiler クリックして展開 +::: details 例1 **入力** @@ -22,9 +20,7 @@ lowercase ::: -:::info 例2 - -:::spoiler クリックして展開 +::: details 例2 **入力** @@ -42,15 +38,13 @@ UPPERCASE ### ヒント -:::tip ヒント1 - -:::spoiler クリックして展開 +::: details ヒント1 `char`型は1byteの整数値のため、互いに大小関係があります。ASCIIコードの話を思い出してみましょう。 ::: ### 解答例 -:::danger 解答例1 +::: tip 解答例1 ::: spoiler クリックして展開 `char`型は各文字コードに対応する整数値のため、`<`、`>`、`<=`、`>=`などで大小を比較することができます。 diff --git a/docs/text/chapter-5/practice/divide-each-difficulty.md b/docs/text/chapter-5/practice/divide-each-difficulty.md index c7ca0179..24a255b1 100644 --- a/docs/text/chapter-5/practice/divide-each-difficulty.md +++ b/docs/text/chapter-5/practice/divide-each-difficulty.md @@ -29,9 +29,7 @@ int main() { ### ヒント -:::tip ヒント1 - -::: spoiler クリックして展開 +::: details ヒント1 下のコードの`// ここにフィボナッチ数列の計算を実装しよう`の部分を実装してみよう。 @@ -61,9 +59,9 @@ int main() { ### 解答例 -:::danger 解答例1 +::: tip 解答例1 -:::spoiler クリックして展開 +::: spoiler クリックして展開 ```cpp:line-numbers #include diff --git a/docs/text/chapter-5/practice/plus-equal.md b/docs/text/chapter-5/practice/plus-equal.md index 703b6fb8..ea1282b4 100644 --- a/docs/text/chapter-5/practice/plus-equal.md +++ b/docs/text/chapter-5/practice/plus-equal.md @@ -10,15 +10,13 @@ a += b; ### ヒント -::: tip ヒント1 - -::: spoiler クリックして展開 +::: details ヒント1 `a`を参照渡しで受け取ることで、`a`の値を書き換えることができる。 ::: ### 解答例 -::: danger 解答例1 +::: tip 解答例1 ::: spoiler クリックして展開 ```cpp:line-numbers void compound_assigned_plus(int& lhs, int rhs) { diff --git a/docs/text/chapter-6/practice/order.md b/docs/text/chapter-6/practice/order.md index 2c83fa5b..436a762c 100644 --- a/docs/text/chapter-6/practice/order.md +++ b/docs/text/chapter-6/practice/order.md @@ -37,9 +37,7 @@ int main() { ### 入力/出力例 -:::info 例1 - -:::spoiler クリックして展開 +::: details 例1 **入力** @@ -55,9 +53,7 @@ int main() { ::: -:::info 例2 - -:::spoiler クリックして展開 +::: details 例2 **入力** @@ -77,9 +73,7 @@ int main() { ### ヒント -::: tip ヒント1 - -::: spoiler クリックして展開 +::: details ヒント1 `Item`構造体を宣言して、以下のメンバー変数とメソッドを実装しよう。 - `price`(`int`型) - `name`(`string`型) @@ -87,15 +81,13 @@ int main() { - `print`メソッド ::: -::: tip ヒント2 - -::: spoiler クリックして展開 +::: details ヒント2 クエリとして入力される`1`または`2`の値に応じて、条件に合致するアイテムの情報を出力しよう。 ::: ### 解答例 -::: danger 解答例1 +::: tip 解答例1 ::: spoiler クリックして展開 ```cpp:line-numbers diff --git a/docs/text/chapter-7/practice/sort.md b/docs/text/chapter-7/practice/sort.md index 96d39ba0..e7e2bc68 100644 --- a/docs/text/chapter-7/practice/sort.md +++ b/docs/text/chapter-7/practice/sort.md @@ -35,7 +35,7 @@ int main() { ### 解答例 -::: danger 解答例1 +::: tip 解答例1 ::: spoiler クリックして展開 ```txt diff --git a/docs/text/chapter-8/practice/capsulate-user.md b/docs/text/chapter-8/practice/capsulate-user.md index 298bc35e..3c5a1344 100644 --- a/docs/text/chapter-8/practice/capsulate-user.md +++ b/docs/text/chapter-8/practice/capsulate-user.md @@ -6,7 +6,7 @@ ### 解答例 -::: danger 解答例1 +::: tip 解答例1 ::: spoiler クリックして展開 値の設定をするメンバ関数と取得をするメンバ関数(それぞれsetter/getterと呼ばれます)を用意すると、隠蔽されたメンバ変数へアクセスすることができる。 @@ -51,7 +51,7 @@ class CapsulatedMember { }; ::: -::: danger 解答例2 +::: tip 解答例2 ::: spoiler クリックして展開 メンバ変数の参照を返すメンバ関数でも良い。 diff --git a/docs/text/chapter-8/practice/exponentation.md b/docs/text/chapter-8/practice/exponentation.md index 112ed563..58e0c7d2 100644 --- a/docs/text/chapter-8/practice/exponentation.md +++ b/docs/text/chapter-8/practice/exponentation.md @@ -19,9 +19,9 @@ $c \equiv a ^ b \mod{M} | 0 \leq c < M$ ### 解答例 -:::danger 解答例 - 基礎課題 +::: tip 解答例 - 基礎課題 -:::spoiler クリックして展開 +::: spoiler クリックして展開 ```cpp // 愚直な再帰関数を用いた実装 @@ -45,9 +45,9 @@ int main() { ``` ::: -:::danger 解答例 - 発展課題 +::: tip 解答例 - 発展課題 -:::spoiler クリックして展開 +::: spoiler クリックして展開 ```cpp // メモ化再帰を用いたダブリングの実装