-
C言語で利益と損失を判定するプログラムの作成方法
ある商品やサービスの原価(cost price:cp)と販売価格(selling price:sp)が与えられたとき、C言語のプログラムを使って「利益」が出たのか「損失」が発生したのかを判定し、その金額を出力する方法を解説します。 具体的には、以下のように出力を切り分けます。 利益が出た場合 → 「Profit」とその金額を出力 損失が発生した場合 → 「Loss」とその金額を出力 損得どちらもない場合 → 「No profit nor Loss」を出力 利益・損失の判定ロジック 利益か損失かを判断するには、販売価格(sp)と原価(cp)を比較します。基本的な考え方は以下の通りです。 原
-
【C言語】アルファベットの三角形パターンを出力するプログラムの作り方
整数 n が与えられたとき、長さ n のアルファベットで構成される三角形パターンを出力するのが本記事のテーマです。最初の行には n 文字すべてを出力し、以降の行では先頭の文字から順に1文字ずつ減らしながら表示していきます。 完成したアルファベットの三角形パターンは、下図のようになります。 入出力例 入力:n = 5 の場合 入力:n = 3 の場合 解き方のアプローチ n を入力として受け取り、変数 i を 1 から n までループさせます。 各 i に対して、変数 j を i から n までループさせ、'A' - 1 + j で計算した文字を順番に出力します。 外
-
C言語で等比数列の和を求めるプログラムの書き方【初心者向け解説】
このプログラムでは、3つの入力値を受け取ります。1つ目は「a」(等比数列の初項)、2つ目は「r」(公比)、3つ目は「n」(和を求める項数)です。 等比数列とは、隣り合う項同士の比が常に一定である数列のことです。入力された「a」「r」「n」をもとに、a, ar, ar2, ar3, ar4, … という等比数列を生成し、その総和 a + ar + ar2 + ar3 + ar4 + … を計算します。 入力例1 a = 1 r = 0.5 n = 5 出力例1 1.937500 入力例2 a = 2 r = 2.0 n = 8 出力例2 510.000000 問題を解くためのアプローチ 入力値
-
【C言語】行列内の2行の要素合計における最大差の求め方
問題の概要行列が与えられたとき、その中の2つの行について「行の要素の合計の差」が最大になる組み合わせを見つけるのが本記事のテーマです。ここでは i 行 × j 列の行列 M[i,j] を想定し、行を R0 から Ri-1 までと呼びます。差は「Ry の要素の合計 − Rx の要素の合計(ただし x < y)」という形で計算します。つまり、必ず後ろの行から前の行を引くというルールがある点に注意してください。例題で確認しよう入力例 1M[4][4] = { { 1, 2, 0, 5 }, { 0, 1, 1, 0 }, { 7, 2, 3, 2 }, { 1,
-
C言語でm個の要素からなる2つの部分集合間の最大差を求める方法
この記事では、配列の中からm個の要素を選んで作った2つの部分集合の合計値の差のうち、最大となる値を求める方法を解説します。配列と数値mが与えられたとき、まず最大のm個の数値の合計を求め、そこから最小のm個の数値の合計を引くことで最大差を算出します。つまり、合計が最も大きいm個の部分集合と、合計が最も小さいm個の部分集合を見つけることがこの問題の核心です。 具体例で理解する 例1 入力: arr = {1,2,3,4,5} ; m=3 出力: 最大差 : 6 解説: 最大の3つの数値は「3、4、5」で、その合計は12です。最小の3つの数値は「1、2、3」で、その合計は6です。したがって、最大差は
-
C言語:大きい要素が小さい数の後に現れるときの、2つの要素間の最大差を求める方法
問題の概要サイズNの整数配列が与えられます。配列にはランダムな順序で整数が含まれています。この課題は、より大きい要素がより小さい数の後に現れるという条件を満たす、2つの要素間の最大差を見つけることです。つまり、Arr[j] − Arr[i] が最大になる組み合わせを求めます(ただし j > i)。例1入力:Arr[] = { 2,1,3,8,3,19,21 }出力: 大きい要素が小さい数の後に現れる2つの要素間の最大差 ― 20説明: 最大差は21と1の間であり、配列の中で21は1の後に現れています。例2入力:Arr[] = { 18, 2,8,1,2,3,2,6 }出力: 大きい要素が
-
C言語で配列内の要素の最初と最後のインデックス間の最大差を求める方法
サイズNの整数配列が与えられ、その要素はランダムな順序で並んでいます。この課題では、配列内のある要素について「最初に出現するインデックス」と「最後に出現するインデックス」の差を求め、その差が最大となる値を見つけます。つまり、配列内に2回以上出現する数値の中から、インデックス間の距離が最も大きくなるものを探し出すことになります。条件を満たすペアが複数存在する場合は、その中で最大の差を答えとして返します。 入力例と出力例 入力 Arr[] = { 2,1,3,1,3,2,5,5 } 出力 − 配列内の要素の最初と最後のインデックス間の最大差 − 5 説明 − 各要素のペアとそのインデックス間の差は
-
C言語で解く:k個の要素のグループと配列の残りとの最大差を求めるアルゴリズム
問題概要サイズNの整数配列と数値kが与えられます。配列はランダムな順序の整数で構成されており、ここからk個の要素を取り出して「グループ」を作り、残りのN−k個の要素をもう一方のグループとします。求めたいのは、両グループの要素の合計値の差が最大になるようにk個の要素を選んだときの、その最大差です。考え方この問題のポイントは、kの大きさによって最適な選び方が変わることです。kが小さい場合(配列サイズの半分以下):最小のk個の要素を選べば合計が最小になり、残りのN−k個の要素は自然と大きな合計になります。したがって、最大差は「残りのN−k個の合計 − 最小k個の合計」で求められます。kが大きい場合(
-
C言語で2ステップで引き出すことができる最大の金額
問題の概要2つのロッカーL1とL2があり、それぞれコインが入っているものとします。L1にはA枚、L2にはB枚のコインが入っています。このロッカーからコインを引き出し、引き出した合計額を最大化することが目的です。ただし、各ステップでコインを引き出すと、そのロッカーは直前よりも1枚少ない枚数で補充されます。つまり、L1からA枚のコインを引き出せば次はA-1枚に置き換えられ、L2からB枚を引き出せばB-1枚に置き換えられます。求めたいのは、2ステップ(ちょうど2回の引き出し)で取得できる最大のコイン枚数です。入力例と出力例入力: L1 = 10、L2 = 11出力: 2ステップで引き出せる最大金額
-
【C言語】k人の学生に均等に配布できるチョコレートの最大数を求めるアルゴリズム
本記事では、連続した箱に入ったチョコレートの数が配列として与えられ、それらを k 人の学生に均等に配布する問題を C 言語で解く方法を解説します。 問題の概要 配列の各要素は「連続した箱の中のチョコレートの数」を表し、整数 k はチョコレートを受け取る学生の人数です。求めるべきは、合計が k で割り切れるような連続した箱(部分配列)を選び、その中で合計が最大となるものです。 解き方の基本方針はシンプルです。配列を左から右へ走査しながらチョコレートの数を加算し、その合計を k で割ります。余りが 0(割り切れる)であれば、その合計を変数に保存します。走査を進めながらこの処理を繰り返すことで、条件
-
C言語で文字列内の同一文字間の最大文字数を求める方法
問題の概要 アルファベットで構成された文字列が与えられ、その中には同じ文字が少なくとも2回以上出現しているものとします。この課題の目的は、任意の文字について、その2つの出現位置の間に存在する文字数の最大値を求めることです。もし一つも文字の重複が存在しない場合は、-1 を返します。 入力 − 文字列 str = abcdba 出力 − 文字列内の同一文字間の最大文字数 − 4 説明 − 繰り返し現れる文字は「a」と「b」のみで、それぞれのインデックスは以下の通りです − 1. a 最初のインデックス 0、最後のインデックス 5 → 間の文字数は 5-0-1=4 2. b 最初のインデックス 1
-
【C言語】配列内の同じ要素の2つの出現位置間の最大距離を求める方法
問題の概要整数型の配列が与えられ、その中には同じ要素が複数回出現することがあります。本記事の課題は、配列内で同じ要素が出現する任意の2つのインデックス間の最大距離を求めることです。基本的な考え方はシンプルです。配列を左から順に各要素を取り上げ、同じ数値が最後に出現するインデックスを探します。そして2つのインデックスの差を計算し、これまでに見つかった最大値より大きければ、その値を結果として保持します。入力例1Arr[] = { 1, 2, 4, 1, 3, 4, 2, 5, 6, 5 }出力 − 同じ要素の2つの出現位置間の最大距離:4説明 − 繰り返し現れる数値とそれぞれのインデックスは以下の
-
C・C++で変数を定数として宣言する3つの方法|const・enum・マクロの違いを解説
CおよびC++には、変数を定数として宣言する方法がいくつかあります。それぞれの方法を詳しく見る前に、まず「定数とは何か」を確認しておきましょう。 定数とは? 定数とは、値が変更できないものを指します。プログラミングの観点で言えば、定数とは変数に代入された固定値であり、プログラムの実行中に他の変数やコンポーネントによって書き換えられることはありません。定数は任意のデータ型を持つことができ、プログラム内で不変の要素を定義するために使用されます。例えば、円周率(Pi)は3.14という固定の浮動小数点値を持つため、定数として宣言するのに適した代表例です。 変数を定数として宣言する主な方法 1. con
-
C言語で「値とインデックスの合計」の最大絶対差を求める方法
問題の概要整数の配列が与えられたとき、「値とインデックスの合計」の最大絶対差を計算するのがこの記事の課題です。具体的には、配列内の各インデックスのペア (i, j) について |Arr[i] − Arr[j]| + |i − j| を計算し、その最大値を求めます。ここで |A| は A の絶対値を表します。配列の要素数が 4 であれば、インデックスは 0, 1, 2, 3 となり、考えられるユニークなペアは (0,0)、(1,1)、(2,2)、(3,3)、(0,1)、(0,2)、(0,3)、(1,2)、(1,3)、(2,3) の 10 個です。入力例 1入力 − Arr[] = { 1, 2,
-
C言語で比較回数を最小限に抑えて配列の最大値と最小値を求める方法
整数型の配列が与えられたとき、比較回数をできるだけ少なくして、その配列に含まれる最大要素と最小要素を見つけるのが本記事の目的です。入力例と出力例例1入力Arr[] = { 1, 2, 4, 5, -3, 91 }出力Maximum element : 91Minimum Element : -3解説: 比較回数を減らすために、まず最大値・最小値の変数を Arr[0] で初期化します。その後、2番目の要素から順に各値を min および max と比較し、条件に応じて更新していきます。例2入力Arr[] = { 10, 20, 21, 31, 18, 11 }出力Maximum element :
-
C言語で正と負の整数からなる2つの部分集合間の差を最大化する方法
問題の概要 正と負の整数が混在する配列が与えられます。この課題は、配列内の要素を「正の整数の部分集合」と「負の整数の部分集合」に分けたとき、両者の差(正の部分集合の合計 − 負の部分集合の合計)が最大になる値を求めることです。 ここで重要なポイントは、負の数を引くことは、その絶対値を加えることと同じだという点です。つまり、(正の数の合計) − (負の数の合計) を最大化するには、配列内のすべての負の数を正の数に変換し、全要素の合計を求めればよいことになります。具体例を見ながら理解していきましょう。 例1 入力: Arr[] = { -2, 0, -3, 8, 10, 12, -4 } 出力:
-
C言語で二項係数の最大値を求める方法を解説
正の整数 N が与えられたとき、すべての二項係数の中から最大となる係数項を求める問題について解説します。二項係数とは二項係数の列は次のように表されます。nC0, nC1, nC2, …, nCr, …, nCn-2, nCn-1, nCnこの中で nCr の最大値を見つけるのが目的です。二項係数は以下の式で計算できます。nCr = n! / (r! × (n − r)!)入出力例例1:N = 4 の場合出力: 最大係数 = 6説明:4C0 = 14C1 = 44C2 = 64C3 = 44C4 = 1この場合、最大の係数は 6 です。例2:N = 5 の場合出力: 最大係数 = 10説明:5C
-
N回の操作後に配列に残る「1」の個数を数えるアルゴリズム【C言語】
問題概要サイズNの整数型配列が与えられ、初期状態ではすべての要素が0です。ここで、合計N回の操作を行った後、配列内に「1」がいくつ残っているかを求めるのが課題です。各操作には次のようなルールが定められています。1回目の操作:位置1, 2, 3, 4, … の要素を反転する2回目の操作:位置2, 4, 6, 8, … の要素を反転する3回目の操作:位置3, 6, 9, 12, … の要素を反転するつまり、i回目の操作では「iの倍数の位置にある要素」を反転(0→1、1→0)します。すべての操作を終えた後の配列に含まれる「1」の個数を数えましょう。入力例と出力例入力Arr[] = { 0,0,0,0
-
C言語で直角二等辺三角形に収まる2×2正方形の最大個数を求める方法
問題の概要本記事では、直角二等辺三角形を扱います。二等辺三角形とは、2つの辺が同じ長さを持つ三角形のことであり、直角三角形とは、高さ(図中の ag)と底辺(図中の dg)が互いに垂直に交わっている三角形のことです。ここでの目標は、一辺が2単位の正方形が、この直角二等辺三角形の中に最大でいくつ収まるのかを求めることです。底辺と高さ(両者は等しい値)を入力として受け取り、収まる正方形の個数を出力します。まず、下の図を参考にして問題を理解しましょう。幾何的な考察高さ ag・底辺 gd を持つこの三角形には、一辺2の正方形が3個収まっています。注目すべきは、角の頂点「a」と「d」に接する三角形 aib
-
C言語で購入できるキャンディーの最大数を求めるアルゴリズムを解説
問題の概要長さ size の整数型配列 candies[] が与えられます。各要素 candies[i] は「タイプ i のキャンディーが何個あるか」を表します。目的は、予算の制限を設けず、与えられたルールを守りながら購入できるキャンディーの総数を最大化することです。購入時のルールは次のとおりです。タイプ i のキャンディーを X[i] 個(0 ≤ X[i] ≤ candies[i])購入するとき、すべての j(1 ≤ j ≤ i)について、少なくとも次のどちらか一方の条件が成り立っている必要があります。X(j) < X(i) … タイプ j で購入した個数が、タイプ i よりも少ないX