-
【C言語】指定された半径を持つn辺の正多角形の面積を求める方法
正多角形とは、n個の等しい辺と等しい内角を持つ閉じた図形のことです。本記事で扱う「半径」とは、多角形の中心から任意の頂点までの距離を指します。下の図に示すように、正多角形は中心を共有するn個の同一の二等辺三角形に分割できます。この性質を利用すると、多角形全体の面積を三角法を用いたシンプルな式から導き出すことができます。面積の導出手順まず、基本となる三角形の面積の公式は次のとおりです。三角形の面積 = (底辺 × 高さ) / 2三角法を用いると、中心角が t の小さな三角形の面積は次のように表されます。面積 = r2・sin(t)・cos(t) = (r2・sin(2t)) / 2正多角形は n
-
単利を計算するC言語プログラムの書き方と実装例
単利(Simple Interest)とは単利とは、元金に対して一定の利率で発生する利息のことであり、複利のように利息が元金に加算されて再び利息を生むことはありません。単利は以下の計算式で求めることができます。単利 = (元金 × 利率 × 期間(年数))÷ 100つまり、単利は「元金」「利率」「期間(年数)」の3つの値を掛け合わせ、100で割ることで算出されます。計算例入力: p=5(元金)、r=4(利率)、t=5(年数)出力: 1この場合の計算過程は以下の通りです。SI = 5 × 4 × 5 ÷ 100 = 1C言語による単利計算プログラムそれでは、上記の計算式をC言語で実装してみましょ
-
Cプログラムで最初のn個の自然数の総和の合計を求める方法
自然数の総和の合計とは 「自然数の総和の合計」とは、まず1からnまでの各整数についてそこまでの累積和を求め、その後、得られたすべての和を足し合わせて最終的な値を求めるという考え方です。 この問題では、合計を求める上限となる数nが与えられます。具体例を使って確認してみましょう。 n = 4 1から4までの各数値ごとに、そこまでの累積和を計算します。 1までの和 = 12までの和 = 1 + 2 = 33までの和 = 1 + 2 + 3 = 64までの和 = 1 + 2 + 3 + 4 = 10 次に、これらの累積和をすべて足し合わせます。 合計 = 1 + 3 + 6 + 10 = 20 このよ
-
【Cプログラミング】級数 2, 6, 12, 20, 30… の最初のN項の合計を求める方法
この級数の合計を求めるには、まず級数の規則性を分析することから始めましょう。対象となる級数は次のとおりです。2, 6, 12, 20, 30…級数の分析例n = 6 の場合 合計 = 112 各項を分析すると、 (1+1), (2+4), (3+9), (4+16)... つまり、(1+12), (2+22), (3+32), (4+42)... この級数は、次の2つの級数に分解できます。 s1: 1, 2, 3, 4, 5… s2: 12, 22, 32, …このように、各項は「自然数 n」と「その2乗 n2」の和で表されることがわかります。したがって、全体の合計は「自然数の和」と「2乗の和
-
Cプログラミングで級数 2、10、30、68、… の最初のN項の合計を求める方法
この級数の合計を求めるには、まず級数の規則性を分析することから始めましょう。 対象となる級数は次のとおりです。 2、10、30、68、… 例 n = 6 の場合 合計 = 462 級数の規則性を分析する 与えられた級数をよく観察すると、この級数は2つの級数の和で構成されていることがわかります。1つ目は自然数 n の級数、2つ目は自然数 n の3乗(立方数)の級数です。つまり、各項は次のように分解できます。 2, 10, 30, 68 = (1+1³), (2+2³), (3+3³), (4+4³) したがって、級数全体の合計は次のように表すことができます。 sum = 2 + 10 + 3
-
C言語で数列5、12、23、38…の最初のN項の合計を求める方法
数列「5、12、23、38…」の最初のN項の合計を求めるには、まずこの数列の特徴を分析し、既知の数列であるか、あるいは複数の数列を組み合わせたものかを見極める必要があります。本記事では、任意の値 n に対してこの数列の合計を効率的に求める方法を解説します。 問題の確認 与えられた数列は「5、12、23、38…」です。任意の n に対して、最初の n 項の合計を求めます。 例 n = 3 の場合 合計 = 40 (5 + 12 + 23) 数列の分析 与えられた数列を詳しく観察すると、隣接する項同士の差は次のようになっています。 12 − 5 = 7 23 − 12 = 11 38 − 23
-
C言語プログラムで単一リンクリスト(片方向連結リスト)のノードの合計を求める方法
片方向リンクリストとは片方向リンクリスト(単一リンクリスト)は、各要素(ノード)が「データの値」と「次のノードへのリンク(ポインタ)」という2つの部分で構成されるデータ構造です。リンクリスト内のすべての要素の合計を求めるには、先頭ノードから順に各ノードをたどりながら、その値を合計用の変数に加算していきます。具体例リンクリスト: 2 -> 27 -> 32 -> 1 -> 5 合計 = 2 + 27 + 32 + 1 + 5 = 67合計を求める2つの方法リンクリストのノードの合計を求めるには、大きく分けて次の2つの方法があります。方法1:ループ(反復処理)を使ってリンク
-
C言語でN以下の「2または5で割り切れる数」の合計を効率的に求める方法
Nまでの自然数のうち、2または5で割り切れる数の合計は、包除原理を用いることで効率的に計算できます。具体的な手順は以下の通りです。N以下の自然数の中で2で割り切れる数の合計を求めるN以下の自然数の中で5で割り切れる数の合計を求める上記2つの合計を足し合わせる最後に、10で割り切れる数(2と5の公倍数)の合計を引くこうすることで、重複して加算された数が取り除かれ、目的の結果が得られます。この手法は数学的な公式を利用するため、非常に大きなnの値に対しても高速に動作するのが特徴です。ループを使う方法との比較ループと条件分岐を使って、2または5で割り切れる数だけを順番に足していく方法を思い浮かべる方も
-
C言語で数列 2, 22, 222, 2222… の総和を求める方法
本記事では、数列「2, 22, 222, 2222, …」の総和(合計)を求めるC言語プログラムを紹介します。各項を一つずつ足し合わせる方法もありますが、数学的な公式を利用すれば、項数が多くなっても効率よく計算できます。 総和を求める公式の導出 この数列の総和は、以下のように式を変形していくことで求められます。 sum = 2 + 22 + 222 + 2222 + …(第n項まで) = 2 × (1 + 11 + 111 + 1111 + …) = (2/9) × (9 + 99 + 999 + 9999 + …) = (2/9) × {(10-1) + (1
-
【C言語】数列0.6、0.06、0.006、…の第n項までの合計を求めるプログラム
数列の性質数列 0.6、0.06、0.006、0.0006、… は、各項が直前の項を10で割った値になっている等比数列です。初項 a = 0.6、公比 r = 0.1 であるため、公比が1より小さい場合に適用できる等比数列の和の公式を利用して合計を求めます。計算式の導出公比 r < 1 のとき、初項から第n項までの和 S は次の公式で表されます。S = a × [1 − r^n] / (1 − r)この数列に a = 6/10、r = 1/10 を代入すると、以下のように整理できます。Sum = (6/10) × [1 − (1/10)^n] / (1 − 1/10) Sum = (6/
-
C言語で配列から合計三角形(Sum Triangle)を作成する方法
合計三角形とは 配列から作る合計三角形(Sum Triangle)とは、配列の要素数を1つずつ減らしながら、隣り合う要素同士の和からなる新しい配列を順に積み上げて形成される三角形のことです。この処理は、配列に要素が1つだけ残るまで繰り返されます。 具体例で理解する まず、次の例を見てみましょう。 Array = [3,5,7,8,9] 出力 [106] [47,59] [20,27,32] [8,12,15,17] [3,5,7,8,9] 計算過程の解説 第1段階:(3 + 5 = 8)、(5 + 7 = 12)、(7 + 8 = 15)、(8 + 9 = 17) 第2段階:8 + 12 =
-
C++で文章内の各単語のASCII値の合計を求める方法
ASCII値とはASCII値とは、ASCII(American Standard Code for Information Interchange)という文字コード規格に基づいて、各文字に割り当てられた整数値のことです。たとえば、半角英字の「a」は97、「A」は65、「0」は48といった具合に、すべての文字が固有の数値に対応しています。問題の概要この記事では、次のような問題を扱います。「1つの文章が与えられたとき、文中の各単語ごとにASCII値の合計を計算し、さらに全体の合計も求めよ」手順としては、まず文章を構成するすべての文字のASCII値を取得し、単語ごとにそれらを加算します。これにより各
-
C/C++プログラミングで学ぶスーパー素数の求め方と実装例
スーパー素数とは?スーパー素数(super-prime)とは、すべての素数を小さい順に並べた列の中で、素数番目に位置する素数のことです。「高階素数(higher-order primes)」と呼ばれることもあります。スーパー素数の例としては、3、5、11、17 などが挙げられます。具体例:13未満のスーパー素数を求める入力:13出力:3, 5, 11解説:13未満のスーパー素数を求めるには、まず13未満の素数をすべて列挙します。13未満の素数は「2, 3, 5, 7, 11, 13」です。ここで 2 は素数なので、2番目に位置する素数(3)がスーパー素数となります。同様に、3番目の素数は 5、
-
C言語で学ぶ超完全数(スーパーパーフェクト数)の判定方法
超完全数とは? 「超完全数(スーパーパーフェクト数)」とは、完全数の概念を一般化した数論上の概念です。1969年に数学者のD・スリヤナラヤナ(D Suryanarayana)によって発見されました。超完全数は、次の式を満たす自然数として定義されます。 sig(sig(n)) = 2n ここで sig(n) は、ある整数の約数の総和を求める関数で、「約数和関数」と呼ばれます。つまり、約数の総和を2段階で計算した結果が元の数の2倍になるとき、その数を超完全数と呼びます。 具体例1:16は超完全数 N = 16 が超完全数かどうかを、約数の総和を使って確認してみましょう。 sig(16) = 1 +
-
C言語で六角柱の表面積と体積を計算する方法
「表面積」とは、立体図形の表面が覆っている面積の合計のことです。この記事では、C言語を使って六角柱の表面積と体積を計算する方法を、公式の意味からサンプルコード、実行結果まで順を追って解説します。 六角柱とは? 六角柱とは、上下の底面に六角形を持ち、側面に6枚の長方形が連なった立体図形のことです。数学的には、六角柱は「8つの面・18本の辺・12個の頂点」を持つ三次元図形として定義されています。 面: 8枚(六角形の底面2枚 + 長方形の側面6枚) 辺: 18本 頂点: 12個 表面積・体積を求める公式 六角形の一辺の長さを a、柱の高さを h とすると、六角柱の表面積と体積はそれぞれ
-
C++で隣り合う絵が同じ色にならないようにN枚の絵を描く組み合わせの数を求める方法
問題の概要この問題では、N枚の絵とM色の絵の具が与えられ、「隣り合う2枚の絵が同じ色にならないように」描く方法が全部で何通りあるかを求めます。答えとなる値は非常に大きくなる可能性があるため、そのまま扱うのは困難です。そこで、標準的な手法として 109 + 7 を法とした剰余(モジュロ)で計算を行います。組み合わせの数を求める公式隣接する絵同士が同じ色にならないように塗る場合の総数は、次の式で求められます。Ways = m × (m − 1)(n − 1)この式の理屈はシンプルです。まず1枚目の絵には全てのM色から自由に色を選べますが、2枚目以降の各絵は「直前の絵と異なる色」でなければならないた
-
【C言語】セミコロンを使わずに「Tutorials Point」を出力するプログラムの書き方
セミコロンなしで文字列を出力するには?C言語でセミコロンを使わずに文字列を出力するには、標準出力の仕組みと、セミコロンがなぜ必要とされるのかを理解する必要があります。セミコロンは文の終わりを示す記号で、プログラムに対して「ここで文が終わる」ことを伝える役割を果たします。標準出力に使われるprintfは、標準入出力ライブラリ(stdio.h)に含まれる関数です。まずはprintf()関数の仕組みを詳しく見ていきましょう。int printf(const char *format, ...)この関数は整数値を返し、formatと...(可変長引数)を受け取ります。formatは出力画面に表示される
-
C言語で「1を渡すと2を、2を渡すと1を返す」関数を実装する方法
入力が1なら2を、入力が2なら1を返す関数を作る方法を紹介します。このような関数は、使用するロジックによってさまざまな方法で実装できます。最も簡単なのは条件分岐を使い、「数値が1なら2を返し、そうでなければ1を返す」とする方法です。そのほか、数学的な演算(引き算など)やXOR(排他的論理和)演算を利用する方法もあります。 実装例 以下のサンプルコードでは、if文を使う方法と、2つの数の合計(この場合は3)から入力値を引く方法の2通りを示しています。 #include <stdio.h> // 方法1:if文を使う int reverseif(int x) { if (x
-
C言語で木構造(ツリー)を削除する方法|後順走査を使った実装例
木構造を削除するには?木(ツリー)を完全に削除するには、木を走査して各ノードにアクセスし、それらを一つずつ解放していく必要があります。すべてのノードを削除し終えると、木は空の状態になります。このとき重要なのは、必ず子ノードを先に削除してから親ノードを削除するという点です。親ノードを先に解放してしまうと、子ノードへの参照が失われ、メモリリークなどの問題が発生します。そこで、木を「下から上へ」という順序で走査できる手法が必要になります。後順走査(ポストオーダー走査)が最適な理由この条件に最も適しているのが後順走査(postorder traversal)です。後順走査は、左右の子部分木をすべて処理
-
【C言語入門】文字列が回文(パリンドローム)かどうかを判定するプログラムの書き方
回文(パリンドローム)とは、前から読んでも後ろから読んでも同じになる単語・数字・フレーズなどの文字列のことです。例えば「madam」「racecar」といった単語や、数字の「10801」などが回文の代表例として挙げられます。 ある文字列を逆順に並べ替えた結果が元の文字列と完全に一致する場合、その文字列は回文であると判断できます。つまり、回文かどうかを調べるには、1文字目と最後の文字、2文字目と後ろから2番目の文字…というように、先頭と末尾から順に対応する文字同士を比較し、すべて一致するかどうかを確認すればよいのです。 入力例と出力例 入力: naman出力: string is a pali