Cプログラミング

 Computer >> コンピューター >  >> プログラミング >> Cプログラミング
  1. n個のバイナリ文字列の合計を求める方法|C++での2進数加算の実装例

    n個のバイナリ文字列を加算するとは?このプログラムでは、与えられた複数のバイナリ(2進数)文字列をすべて加算します。入力としてn個のバイナリ文字列が渡され、それらを合計した結果を1つのバイナリ文字列として出力するのが目的です。処理には通常の2進数加算のロジックを利用し、1つ目の文字列からn個目までを順番に足し合わせていくことで、最終的な結果を求めます。入出力例Input: "1011", "10", "1001" Output: 10110解説:2進数のまま加算するアプローチもっとも簡単な方法は、バイナリ文字列を一度10進数に変換して

  2. C/C++のトークンとは?キーワード・識別子・演算子の種類をわかりやすく解説

    C++におけるトークンとは、プログラムを構成する最小の単位のことです。C++はC言語のスーパーセットであるため、Cのほとんどの構成要素は、意味や使い方が変わらないままC++でも利用できます。そのため、トークンや式、データ型もC言語とよく似ています。C++のトークンには、主に以下の種類があります(C++のトークンの多くは、基本的にCのトークンと共通しています)。キーワード(予約語)識別子定数変数演算子キーワード(予約語)キーワードは、あらかじめ意味が固定されている予約語であり、ユーザーがその意味を変更することはできません。これらのキーワードの意味や動作は、コンパイラがすでに認識しています。C++

  3. 第n項が n² − (n−1)² で表される級数の総和を求めるC/C++プログラム

    数学にはさまざまな種類の級数が存在し、その多くはC言語やC++を使って効率的に計算することができます。本記事では、次の級数の総和を求めるプログラムを紹介します。 Tn = n2 - (n-1)2 この級数のすべての項の総和 Sn を、109 + 7 で割った余り(mod)として求めます。総和は次のように定義されます。 Sn = T1 + T2 + T3 + T4 + …… + Tn 入力:229137999 出力:218194447 解説 Tn は 2n − 1 の形に変形できます。(n−1)2 を展開して、実際に確認してみましょう。 => Tn = n2 - (n-1)2 =>

  4. 配列内で奇数回出現する数値を見つけるC/C++プログラム

    正の整数からなる配列の中で、奇数回出現する数値を見つけるC++プログラムを紹介します。この配列では、答えとなる1つの数だけが奇数回出現し、それ以外のすべての数値は偶数回出現するものとします。 入力: arr[] = {5, 7, 8, 8, 5, 8, 8, 7, 7} 出力: 7 アルゴリズムの解説 この方法では、二重ループを使用します。外側のループで配列の各要素を1つずつ順番に走査し、内側のループでその要素が配列全体に出現する回数をカウントします。カウントした結果が奇数であれば、その要素が求める答えとなります。 上記の例では、数値「5」は2回、「8」は4回出現していますが、「7」だけが3

  5. C/C++で母音と子音を交互に並べる文字列再編成アルゴリズム

    問題概要文字列が与えられたとき、文字を並べ替えて母音と子音が交互に配置されるような文字列を作成するのが本記事のテーマです。もし条件を満たす並べ替えが不可能な場合は、「not possible」と出力します。重要な制約として、母音同士の相対的な順序、および子音同士の相対的な順序は元の文字列のまま維持しなければなりません。入力: abce 出力: abecアルゴリズムの考え方まず、文字列内に含まれる母音と子音の個数をそれぞれ数えます。母音と子音の個数の差が1より大きい場合(差が2以上)、交互に配置することは不可能なので「Not Possible」を返します。母音の方が子音より多い場合は、最初の母音

  6. 【C言語】パンケーキソート(Pancake Sort)の実装プログラムと仕組みを解説

    本記事で紹介するCプログラムは、整数型の配列に対してパンケーキソート(Pancake Sort)を実装したものです。 パンケーキソートとは? パンケーキソートとは、ソート問題の一種で、「配列の先頭から任意の位置までの要素(プレフィックス)を反転させる」という操作だけが許された特殊なソートです。 この名前は、皿に積まれた大きさがバラバラのパンケーキを並べ替える数学的問題に由来しています。フライ返し(へら)をスタック内の任意の位置に差し込み、その上にあるすべてのパンケーキを一気にひっくり返すことで、サイズ順に並べ替えます。このとき必要となる最小の反転回数は「パンケーキ数」と呼ばれています。 通

  7. C言語で配列を左にn回転させるプログラムの書き方

    C言語で配列を左方向にn回転させるプログラムの書き方を解説します。配列の要素を指定した回数だけ左へシフトし、はみ出した先頭の要素を末尾に移動させる「左回転(左ローテート)」の基本的なロジックを、サンプルコードと実行例付きでわかりやすく紹介します。入力と出力の例入力: arr[] = 1 2 3 4 5 6 7 8 9 10N = 3出力: 4 5 6 7 8 9 10 1 2 3アルゴリズムの流れまず、配列 arr に要素を格納します。回転させる回数を変数 N に設定します。「1回分の左回転」をN回繰り返します。1回分の左回転とは、配列の全要素を1つずつ左にずらし、先頭にあった要素を末尾へコピ

  8. C++で約数の個数が偶数か奇数かを判定するプログラム

    はじめに整数「n」が入力として与えられたとき、nの約数の総数が偶数であるか奇数であるかを判定するプログラムを、C++で作成する方法を解説します。偶数と奇数とは偶数とは、2でちょうど割り切れる整数のことです。例:0、8、-24奇数とは、2で割り切れない整数のことです。例:1、7、-11、15実行例Input: 10Output: Even考え方(アルゴリズム)nのすべての約数を求めて個数を数え、その数を2で割った余りを確認することで、偶数か奇数かを判定します。約数を効率よく数えるポイントは、1から√n(平方根)までの範囲だけを調べればよいという点です。i が n の約数であれば、n/i も必ず

  9. バックトラッキングで解く「迷路のネズミ」問題 ― C++プログラム実装ガイド

    迷路のネズミ問題とは「迷路のネズミ(Rat in a Maze)」は、バックトラッキング(探索の巻き戻し)を活用する有名なアルゴリズム問題の一つです。迷路は2次元行列として表現され、一部のセルは通行止め(ブロック)されています。スタート地点となるセルと、ゴールとなるセルが存在し、ブロックされたセルに一切立ち入ることなく、スタートからゴールまでの経路を見つけることが課題です。以下は未解決状態の迷路の例です。そしてこちらがその解答例です。このパズルを解くには、まずスタートのセルから出発し、道が塞がれていない方向へ進みます。進んだ先でゴールに到達できればパズルは解けたことになります。到達できなければ

  10. 行列が交代行列(歪対称行列)かどうかを判定するC++プログラムの解説

    正方行列Aが、すべてのiとjについて aij = −aji を満たすとき、行列Aは「交代行列(歪対称行列)」と呼ばれます。言い換えれば、行列Aの転置行列が元の行列のマイナス倍と等しい場合(AT = −A)、その行列は交代行列であるといえます。なお、交代行列の主対角成分は必ずすべて0になるという特徴があります。交代行列の例具体的な行列を見てみましょう。A= |0 -5 4| |5 0 -1| |-4 1 0|この行列が交代行列である理由は、すべてのiとjについて aij = −aji が成り立つからです。例えば、a12 = −5、a21 = 5 であり、a12 = −a21 という関

  11. C言語で商と剰余を計算するには?初心者向けサンプルコード付き解説

    2つの数値「被除数(dividend)」と「除数(divisor)」が与えられたとき、被除数を除数で割った結果である「商」と「剰余(余り)」を求めるプログラムをC言語で作成します。 商と剰余の基本 割り算を理解するうえで、次の4つの要素の関係を押さえておきましょう。 被除数: 割られる数 除数: 割る数 商: 割り算の結果として得られる数 剰余: 割り切れずに残った数 たとえば、55 ÷ 9 の場合は次のようになります。 55 ÷ 9 = 6 余り 1 被除数:55 除数:9 商:6 剰余:1 入出力例 入力: 被除数 = 6 除数 = 2 出力: 商 = 3 剰余 = 0 プログラムの

  12. 【C言語】テキストファイルの行数を数えるプログラムの作り方

    この記事では、C言語を使ってテキストファイル内の総行数を取得する方法を解説します。このプログラムは、指定したファイルを開き、内容を1文字ずつ読み込みながら、改行文字(\n)の出現回数をカウントすることで、ファイル全体の行数を求めます。入力: ファイル「test.txt」   Hello friends, how are you?   This is a sample file to get line numbers from the file. 出力: 行数の合計:2仕組みの解説プログラムの処理の流れは以下の通りです。まず fopen() で対象ファイルを読み込みモード(r)で開きます。続い

  13. 数の因子の最小合計を求めるC++プログラムの解説

    本記事では、ある整数を複数の因子(約数)の積に分解したとき、その因子の合計が最小となる値を求めるプログラムについて解説します。すべての因子の組み合わせを列挙して比較する必要があるように思えますが、実は素因数分解を利用することで、効率的に答えを求められます。 入力:n = 12 出力:7 考え方 まず数nの因子を見つけて合計を求め、その合計を最小化することを目指します。12の場合、因子への分解の仕方はいくつもあります。それぞれの分解方法と因子の合計は以下の通りです。 12 = 12 × 1 → 12 + 1 = 13 12 = 2 × 6 → 2 + 6 = 8 12 = 3 × 4 →

  14. C/C++による線形探索プログラムの実装方法を解説

    線形探索とは線形探索(リニアサーチ)アルゴリズムでは、目的の要素を配列の各要素と先頭から順番に比較していきます。該当する要素が見つかれば、その位置を出力します。線形探索の最悪計算量は O(n) です。入力: arr[] = { 12, 35, 69, 74, 165, 54} 探索値 = 165 出力: 165 は位置 5 に存在します。アルゴリズムの解説線形探索は、指定された数値が配列内に存在するかどうか、存在する場合にはどの位置にあるのかを調べるための基本的な探索アルゴリズムです。「逐次探索」と呼ばれることもあります。その動作は非常にシンプルで、以下の手順で行われます。配列の先頭要素から順

  15. C/C++でモジュラー方程式(剰余等式)の解の個数を求めるプログラム

    本記事では、モジュラー方程式(剰余等式)に関する興味深い問題を取り上げます。2つの値 A と B が与えられたとき、「(A mod X) = B」を満たす変数 X の候補がいくつあるかを求めるというものです。例として、A = 26、B = 2 の場合を考えてみましょう。この条件を満たす X の値は {3, 4, 6, 8, 12, 24} の6つとなるため、答えは 6 になります。それでは、処理の流れを理解するためにアルゴリズムを見ていきましょう。アルゴリズムpossibleWayCount(a, b)begin if a = b, then there are infinite so

  16. C/C++で連続する1を含まないバイナリ文字列の個数を数えるプログラム

    ここでは、少し頭を使う面白い問題を紹介します。ある整数 n が与えられたとき、「1 が隣り合って現れない」長さ n のバイナリ文字列(0 と 1 だけで構成される文字列)が全部でいくつ存在するかを求めます。たとえば n = 2 の場合、条件を満たす文字列は {00, 01, 10} の 3 つなので、答えは 3 になります。「11」だけが除外されるわけです。この問題は動的計画法(DP)を使えば効率よく解くことができます。考え方は次のとおりです。まず 2 つの配列 a と b を用意します。a[i]:長さ i・連続する 1 を含まない・末尾が 0 であるバイナリ文字列の個数b[i]:長さ i・連

  17. C/C++プログラムで桁の配列として表現された数値に1を加算する方法

    この記事では、少し変わった興味深い問題を取り上げます。ある数値が与えられ、それに1を加算する——これは一見すると非常に簡単なタスクです。しかし、ここでは数値を配列として扱います。つまり、数値の各桁が配列の要素として格納されます。例えば、数値が512であれば、{5, 1, 2}のように保存されます。さらに、この加算処理は再帰的なアプローチを用いて実装します。まずは全体の流れをつかむために、アルゴリズムを見ていきましょう。アルゴリズムincrement(arr, n, index) −初期状態では index のデフォルト値は 0 begin if index < n, then

  18. C++で文字列の英数字略語をすべて生成する方法を解説

    この記事では、与えられた文字列から「英数字略語」をすべて生成する興味深い問題を取り上げます。対象となる文字列の長さは10未満とし、考えられるすべての略語パターンを出力します。 英数字略語とは、文字と数字が混在した形式の文字列のことです。数字は「省略(スキップ)された文字数」を表します。省略される部分はいくつあっても構いませんが、隣り合う2つの省略部分が連続することはありません。例えば「HELLO」であれば、「HELL1」(末尾のOを省略)や「H2O」(ELとLを省略)といった形になります。 なお、文字列の長さを10未満に制限しているのは、省略した文字数が最大でも9(1桁)で表せるようにするため

  19. C++で3次元空間における2つの平面間の角度を計算する方法

    本記事では、3次元空間内にある2つの平面 P1 と P2 の間の角度を求める方法を解説します。平面の方程式と角度の公式平面 Pi の方程式は、一般に次の形式で表されます。a・x + b・y + c・z + d = 0ここで、係数 (a, b, c) は平面の法線ベクトルを表しています。2つの平面がなす角度を「A」とすると、それぞれの法線ベクトルのなす角として、次の式で求められます。cos A = (a₁a₂ + b₁b₂ + c₁c₂) / (√(a₁² + b₁² + c₁²) × √(a₂² + b₂² + c₂²))つまり、分子は2つの法線ベクトルの内積、分母はそれぞれの法線ベクトルの大

  20. 正六角形に内接する円に内接する正方形の面積を求めるC++プログラム

    本記事では、正六角形に内接する円、さらにその円に内接する正方形の面積を求める方法を解説します。各記号は以下のように定義します。 正方形の一辺:a 円の半径:r 正六角形の一辺:A 位置関係を図にすると、最も外側に正六角形があり、その内部に円、さらに円の内部に正方形が収まる構造になります。 面積の導出手順 ステップ1:六角形に内接する円の半径 一辺がAの正六角形に内接する円の半径は、次の式で表されます。 r = (√3 / 2) × A ステップ2:円と正方形の関係 円に内接する正方形では、円の半径は正方形の対角線の半分に等しくなります。対角線の長さは a√2 なので、次の関係が成り立ちます

Total 1445 -コンピューター  FirstPage PreviousPage NextPage LastPage CurrentPage:32/73  20-コンピューター/Page Goto:1 26 27 28 29 30 31 32 33 34 35 36 37 38