C++

 Computer >> コンピューター >  >> プログラミング >> C++
  1. C++で3または7の倍数の個数を求める方法

    数値 n が与えられたとき、n までに含まれる 3 または 7 の倍数の個数を求める問題を考えます。まずは具体例を見てみましょう。 入出力の例 入力 100 出力 43 100 までには、3 または 7 の倍数が合計 43 個存在します。 アルゴリズム 数値 n を初期化します。 カウント用の変数を 0 で初期化します。 3 から n まで繰り返すループを作成します。 現在の数値が 3 または 7 で割り切れる場合は、カウントを 1 増やします。 C++での実装 以下は、上記のアルゴリズムを C++ で実装したコードです。 #include <bits/stdc++.h>

  2. C++でビット演算を使って整数に3.5を掛ける方法

    n × 3.5 の結果を求めるには、(n × 2) + n + (n ÷ 2) を計算します。ビットを左に1ビットシフトすれば「n × 2」、右に1ビットシフトすれば「n ÷ 2」となり、これらをすべて加算することで結果が得られます。 n × 3.5 = (n × 2) + n + (n ÷ 2) この式が正しいことは、さまざまな n の値を代入して確認できます。それでは、いくつか例を見てみましょう。 入力 2 7 10 出力 7 24 35 アルゴリズム 数値 n を初期化します。 左シフト演算子(<<)を使って n × 2 を求めます。 右シフト演算子(>>)を使

  3. C++で*演算子や/演算子を使わずに数値に15を掛ける方法

    はじめにC++では、左シフト演算子(<<)を使うことで、*(掛け算)や/(割り算)の演算子を使用せずに、数値に15を掛けることができます。左シフトとは、ビットを左に移動させる操作です。1ビット左にシフトすると、その数は2倍になります。つまり、n << 1は「n × 2」と同じ意味を持ちます。この性質を利用すると、次の2つの方法で15倍を計算できます。方法1: 16n − n を計算する与えられた数値nを4ビット左シフトすると、16 × nが得られます。そこから元の数値nを引けば、結果として15 × nが求まります。方法2: シフトの足し合わせで表現する15 × nは、8

  4. C++でビット演算子を使って2つの数値を乗算する方法

    このチュートリアルでは、ビット演算子のみを使って、与えられた2つの数値の乗算を行うプログラムをC++で作成します。乗算には左シフト(<<)演算子を、除算には)演算子を使用します。2つの数値 x と y の積は、yが偶数の場合 x * y = (x * 2) * (y / 2) と書き換えられます。yが奇数の場合は x * y = (x * 2) * (y / 2) + x となります。つまり、第2の数値が奇数になるたびに、その時点の第1の数値を結果に加算していけばよいことになります。それでは、問題を解くための手順を見ていきましょう。アルゴリズム2つの数値を初期化します。第2の数値が0になるまで

  5. 【C++】文字列として表現された大きな数同士の乗算を実装する方法

    文字列形式で与えられた2つの大きな数値を乗算する方法を解説します。この問題を解く鍵となるのは、「前回の桁同士の乗算結果」と「繰り上がり(carry)」を保持しながら計算を進めるという考え方です。前の桁の乗算結果と繰り上がりを活用することで、次の桁の積を効率的に求めることができます。 まずは具体例を見てみましょう。 入力 15 2 出力 30 アルゴリズム 2つの数値を文字列として初期化します。 長さが「1つ目の数値の長さ + 2つ目の数値の長さ」である結果格納用の文字列を初期化します。 1つ目の数値を末尾から先頭に向かって走査します。 2つ目の数値も末尾から先頭に向かって走査します。

  6. 【C++】連結リストで表された2つの数値を乗算して新しいリストに結果を格納する方法

    数字が格納された2つの連結リスト(リンクリスト)が与えられたとき、それぞれのリストが表す2つの数値を乗算することを考えてみましょう。各連結リストから順に桁を取り出して数値を構築すれば、この問題は簡単に解くことができます。まずは具体的な例を見てみましょう。 入力と出力の例 入力 1 -> 2 -> NULL 2 -> 3 -> NULL 出力 2 -> 7 -> 6 -> NULL この例では、1つ目の連結リストが表す数値は「12」、2つ目の連結リストが表す数値は「23」です。12 × 23 = 276 となるため、出力は「276」を表す連結リストにな

  7. C++で連結リスト表現の2つの数値を乗算する方法

    ここでは、数字が格納された2つの連結リスト(リンクリスト)が与えられます。それぞれの連結リストが表す数値を乗算し、その結果を求めることが目的です。各連結リストから順に数値を構築すれば、この問題は簡単に解くことができます。具体的な例を見てみましょう。 入力例と出力例 入力: 1 -> 2 -> NULL 2 -> 3 -> NULL 出力: 2 -> 7 -> 6 -> NULL この例では、最初のリストが「12」、2番目のリストが「23」を表しており、12 × 23 = 276 となるため、出力は「276」を表す連結リストになります。 アルゴリズム

  8. C++で2つの多項式を乗算する方法:アルゴリズムと実装例を解説

    多項式の各項の係数は、配列として与えられることが一般的です。本記事では、配列形式で表された2つの多項式を乗算する方法を、具体的な例とともに解説します。 入力 A = [1, 2, 3, 4] B = [4, 3, 2, 1] 出力 4x6 + 11x5 + 20x4 + 30x3 + 20x2 + 11x1 + 4 この例では、配列 A は多項式 1 + 2x + 3x² + 4x³ を、配列 B は多項式 4 + 3x + 2x² + x³ を表しています。これらを掛け合わせると、次数6の多項式が得られます。 アルゴリズム 2つの多項式(係数配列)を初期化します。 積の多項式を格納するため

  9. C++で数値が29で割り切れるかどうかを判定する方法

    与えられた数値が29で割り切れるかどうかを判定するのは、非常にシンプルな問題です。C++では、剰余演算子(%)を使うことで簡単にチェックできます。ある数値を29で割った余りが0になれば、その数値は29の倍数であると判断できます。それでは、具体的な例を見てみましょう。入力29 254出力1 0アルゴリズム判定の手順は以下の通りです。判定対象の数値 n を受け取る。n を29で割った余り(n % 29)を計算する。余りが0であれば「割り切れる」(true)、そうでなければ「割り切れない」(false)を返す。C++での実装以下は、上記のアルゴリズムをC++で実装したコードです。#include &

  10. C++で配列内の異常値(アノマリー)の個数を求める方法

    このチュートリアルでは、与えられた配列の中に「異常値」がいくつ含まれているかを求めるプログラムをC++で作成します。 ここで「異常値」とは、ある数と配列内の他のすべての数との絶対差が、指定された値 k よりも大きい場合に該当する数のことです。具体的な例を見てみましょう。 入力例 arr = [3, 1, 5, 7] k = 1 出力例 4 この例では、配列内のすべての数について、それ以外の数との絶対差が k = 1 より大きいため、4つすべてが異常値としてカウントされます。 アルゴリズム 異常値の個数を求める手順は以下の通りです。 配列を初期化します。 配列の各要素について、次の処理を繰り返

  11. 【C++】合計がKとなるサイズNの配列(要素は正の整数)の個数を求める方法

    問題の概要2つの整数 n と k が与えられたとき、「n 個の正の整数から構成され、その総和が k になる配列」が何通り作れるかを求めます。この問題の答えは、次の二項係数で表されます。$\dbinom{k - 1}{n - 1}$つまり「k − 1 個の中から n − 1 個を選ぶ組み合わせ」の総数が、条件を満たす配列の個数になります。これは「重複組合せ」として知られる有名な公式です。なぜこの公式が成り立つのか配列の各要素は 1 以上であるため、各要素から 1 を引いて考えると、「0 以上の整数 n 個の和が k − n になる場合の数」に帰着できます。重複組合せの公式より、これは $\dbi

  12. C++で2のn乗の桁数を求める方法

    数のべき乗は、繰り返し掛け算を行うか、プログラミング言語が提供している関数を使用することで簡単に計算できます。 この記事では、2のn乗を求め、その結果が何桁になるのかを計算する方法を解説します。まずは具体例を見てみましょう。 入力 5 出力 2 上記の例では、25 = 32 となるため、桁数は「2」です。 入力 10 出力 4 こちらの例では、210 = 1024 となるため、桁数は「4」になります。 アルゴリズム 整数 n を初期化します。 2n の値を求めます。 log10 の値を切り上げ(ceil)ると、その数の桁数が得られます。 桁数を求めて返します。 なぜ log10 で桁数が分

  13. C++でaのb乗(a^b)の桁数を求める方法

    数のべき乗は、繰り返し乗算や言語標準の関数を使えば簡単に計算できます。 この記事では、aのb乗を求め、その結果の桁数を取得する方法を解説します。まずは具体例を見てみましょう。 入力 a = 5 b = 2 出力 2 入力 a = 7 b = 6 出力 6 アルゴリズム 数値aとbを初期化します。 abの値を求めます。 log10(n)の切り上げ(ceil)を取ると、数nの桁数が得られます。 その値を計算して返します。 ポイントは「常用対数の性質」です。ある整数nの桁数は、log10(n)を切り上げることで求められます。たとえば512ならlog10(512)≈2.71となり、切り上げると3桁

  14. C++で1・2・3・4の4種類の数字から構成される数列のn番目の数の桁数を求める方法

    この記事では、与えられた4つの数字「1、2、3、4」のみを使って構成される数列の中から、n番目の数の桁数を求める問題について解説します。これらの数字だけで作られる数列は、以下のように並びます。1, 2, 3, 4, 11, 12, 13, 14, 21, 22, 23, 24...このパターンを注意深く観察すると、次のような規則性が見えてきます。1桁の数は4個存在します(1、2、3、4)。2桁の数は16個存在します(11〜44)。この傾向は4の累乗として続いていきます。具体例入力7出力2数列の7番目の数は「13」であり、その桁数は2桁です。アルゴリズム手順は以下の通りです。対象となる数nを初期

  15. 【C++】3で割り切れる数にするために削除が必要な最小の桁数を求める方法

    文字列として与えられた数値から、いくつかの桁を取り除くことで3の倍数(3で割り切れる数)にすることを考えます。この記事では、3で割り切れる数にするために削除が必要な最小の桁数を求めるアルゴリズムと、C++での実装方法をわかりやすく解説します。 問題のポイント この問題には重要な性質があります。それは、どんな数でも最大2桁の削除で3の倍数にできるという点です。 理由は次のとおりです。数を3で割った余りは、各桁の数字の合計を3で割った余りと等しくなります。各桁の数字の3で割った余りは「0」「1」「2」のいずれかなので、合計の余りが1なら「余り1」の桁を1つ、余りが2なら「余り2」の桁を1つ削除すれ

  16. C++で行列の修正平均より大きい要素の個数を求める方法

    修正平均とは本記事では、行列の「修正平均」より大きい要素がいくつあるかをC++で求める方法を解説します。まず、修正平均の定義を確認しましょう。修正平均は次の式で定義されます。(行ごとの最小値の合計 + 列ごとの最大値の合計) ÷ (行数 + 列数)具体的な例を見てみましょう。1 2 3 4 5 6 7 8 9この行列の場合、修正平均は以下のように計算できます。mean = (sum(1 + 4 + 7) + sum(7 + 8 + 9)) / (3 + 3)つまり、まず修正平均を求め、その後、平均値より大きい要素の個数を数えます。上記の例では、修正平均は6となり、6より大きい要素は7、8、9の

  17. C++で部分配列内の指定した数以下の要素を数える方法

    問題の概要配列と、部分配列の下限インデックス(lower)および上限インデックス(upper)、さらに基準となる数値 k が与えられます。このとき、指定された範囲内に存在する「k 以下の要素」がいくつあるかを数えるのが目的です。具体的な例を見てみましょう。入力arr = [1, 2, 3, 4, 5, 6, 7, 8] k = 4 lower = 0 upper = 5出力4この場合、インデックス 0 から 5 の間には「4 以下の要素」が 1, 2, 3, 4 の 4 つ存在するため、答えは 4 となります。アルゴリズム配列、基準となる数値、部分配列のインデックスを初期化します。カウント用の

  18. C++でBST(二分探索木)の先行順巡回結果からルートより小さい要素の数を求める方法

    この記事では、BST(二分探索木)の先行順巡回(プレオーダートラバーサル)の結果が与えられたときに、ルート(根)よりも小さい要素の個数を求める方法を解説します。先行順巡回には「配列の最初の要素が必ずBSTのルートになる」という重要な性質があります。この性質を利用すれば、木を実際に構築しなくても効率的に答えを求められます。まずは具体例を見てみましょう。問題の例入力preorder_result = [5, 4, 2, 1, 7, 6, 8, 9]出力3ルートは配列の先頭にある「5」です。ルートより小さい要素は「4」「2」「1」の3つなので、答えは3になります。アルゴリズム先行順巡回の結果を配列と

  19. C++で数字列に含まれる偶数の部分文字列の個数を効率的に求める方法

    数字のみで構成された文字列が与えられたとき、その中から作れる「偶数で終わる部分文字列」の個数を求める問題です。まずは具体例を見てみましょう。入力例と出力例入力num = 1234出力6この文字列から作れる偶数の部分文字列は次の6つです。2 12 4 34 234 1234考え方(アルゴリズム)この問題のポイントは、「偶数かどうかは部分文字列の末尾の数字だけで決まる」という性質を利用することです。ある位置 i の数字が偶数であれば、その位置で終わる部分文字列はすべて偶数になります。位置 i で終わる部分文字列の開始位置は 0〜i の i + 1 通りあるため、答えに i + 1 を加算すればよい

  20. バイナリ文字列を交互文字列にするための最小フリップ回数をC++で求める方法

    バイナリ文字列「10011」が与えられたとします。これを交互文字列(0と1が交互に並んだ文字列)にするためには、最小で2文字をフリップして「10101」にする必要があります。交互文字列には2つのパターンが考えられます。「0」で始まるパターンと「1」で始まるパターンです。そこで、両方のパターンについて必要なフリップ回数をそれぞれカウントし、そのうちの最小値を返します。具体的な例を見てみましょう。入力binary = 10011出力2文字列を「0」で始まる交互文字列にする場合は3回のフリップが必要ですが、「1」で始まる場合は2回のフリップで済みます。したがって、最小値は2となります。アルゴリズムバ

Total 5990 -コンピューター  FirstPage PreviousPage NextPage LastPage CurrentPage:268/300  20-コンピューター/Page Goto:1 262 263 264 265 266 267 268 269 270 271 272 273 274