
武蔵野個別指導塾の特徴
高校情報I 整数の商と余り—まとまりの個数と残りを処理の条件へ戻して確かめる|武蔵野個別指導塾

収納箱の容量と余り0の場合から必要数を導き、周期の位置にも使える整数の商と余りを読み解きます。
よくあるのは、収納物を箱に詰める問題で、割り切れて余りが0なのに箱を1つ追加する場面です。箱に入らない物があるときは追加が必要ですが、余りがなければ追加した箱は空のままです。計算結果を現場の個数に戻すと、その違いが見えてきます。
箱数、残数、繰り返しの位置
問われ方には、まず個数を一定数ずつ分けて満杯の箱数と残りを求める型があります。次に、残りも収納するために必要な最小の箱数を求める型があります。さらに、一定の順序で繰り返す表示について、何番目がどの位置に当たるかを求める型もあります。商と余りは共通ですが、何を答えるかは同じではありません。
ここでは収納物の個数を0以上の整数、箱の容量を正の整数とします。箱は同じ容量で、途中まで入った箱も使えます。出力は整数の箱数です。0個なら箱は0個で、箱の容量が0や負の場合は入力の条件外です。負の個数や小数も扱いません。周期の問題でも、周期の長さは正の整数とします。
割り算の結果を場面へ戻す
個数を n、容量を d、商を q、余りを r とすると、n は「d を q 回分と r 個」に分けられます。r は0以上、d未満です。Pythonでは n // d が商、n % d が余りです。ここでは非負整数と正の除数に限定しているため、商は満杯にできる箱数です。
図1のように、満杯の箱と残りを足して元の個数へ戻します。余りが容量以上なら、もう1箱を満杯にできるので、余りの条件を満たしていません。余りが負でも収納物の残数にはなりません。商と余りの両方を見ることが、答えの検査になります。

図1のように、余りが正なら残りを入れる箱が1つ必要です。余りは容量未満なので、その1箱に収まります。余りが0なら追加は不要です。したがって必要箱数は、余りが正なら q に1を加え、0なら q のままです。0個のときも q と r はともに0なので、特別な箱を足さずに済みます。
なぜ最小なのでしょうか。余りが正のとき、q箱の容量は元の個数に足りず、qに1を加えた箱数なら収まります。余りが0のときはq箱でちょうど収まり、個数が正ならそれより1箱少ないと容量が足りません。個数が0の場合は0箱が最小です。この理由は特定の数を試した結果とは別に、入力条件から成り立ちます。
基本例題:教材カードを箱に入れる
カードが29枚あり、1箱に6枚入ります。必要な箱数を整数で求め、満杯の箱数と残りも答えてください。箱は空でないものだけ数えます。
手計算では6枚ずつ4箱で24枚、残りは5枚です。残り5枚は1箱に入るため、必要数は5箱です。図2のように4箱と残りを分けてから、最後の箱を数えます。5箱の容量は30枚で29枚を収容でき、4箱の容量24枚では足りません。

図2のように満杯の4箱と端数の5枚は区別します。次の自作プログラムはこの場面を扱います。
n = 29
d = 6
q = n // d
r = n % d
boxes = q
if r > 0:
boxes = boxes + 1
print(q, r, boxes)
1行目と2行目でカード数と箱の容量を設定します。3行目で満杯の箱数4を求め、4行目で残り5を求めます。5行目で満杯分を必要数の初期値にし、6行目で残りが正か調べます。真なので7行目で箱を1つ足し、最後に商、余り、箱数の順で表示します。条件が偽なら7行目を通らず、最後の表示に進みます。
Python 3.14.8 の実行では入力をコード内の29と6に固定し、期待出力 4 5 5 に対して実際の出力も 4 5 5 でした。商の4に容量6を4回足した24へ5を足すと29です。容量30と24の比較まで行うと、値が式に合うだけでなく最小箱数としても条件を満たします。
標準例題:余りが0の境界
部品を8個ずつ箱に入れます。32個と0個について、それぞれ必要な箱数を整数で求めてください。容量は8個、箱が空なら数えません。
32を8で割ると商4、余り0です。4箱で32個がちょうど収まるので答えは4箱です。3箱では24個分しかなく、1箱足りません。0個の場合は商0、余り0で、必要数は0箱です。0箱の容量は0個で、収納物の数に一致します。前のコードの n と d を順に32と8、0と8へ変えた期待出力は 4 0 4、0 0 0 で、実際の出力もそれぞれ一致しました。
この2入力は、余りが0でも商が正の場合と、商も0の場合を分けます。余りが0なら常に1箱足すという規則では、前者は空箱を数え、後者は物がないのに箱を数えてしまいます。余りの正負の判定を箱の必要性に結びつけると誤りを見つけやすくなります。
発展例題:周期の位置を求める
掲示の色が青、緑、橙の順で繰り返されます。最初の掲示を1番目とし、20番目の色を答えてください。色の順番には0から2の位置を付けます。
1番目を位置0へ対応させるため、番号から1を引いて3で割った余りを使います。20番目なら19を3で割り、商6、余り1です。位置1は緑なので答えは緑です。19は3個のまとまり6組と1個に戻り、先頭から数える20番目に対応します。番号をそのまま3で割ると先頭位置がずれてしまいます。
number = 20
period = 3
position = (number - 1) % period
colors = ["青", "緑", "橙"]
print(position, colors[position])
番号と周期を設定し、3行目で1始まりを0始まりに直して余りを求めます。4行目のリストは位置0から順に色を置きます。最後に位置とその色を表示します。入力20、期待出力 1 緑 に対して実際も 1 緑 でした。番号3なら位置2、番号4なら位置0となり、周期の終わりと次の先頭がつながります。番号0はこの問題の入力条件外です。
空箱を足す誤答を直す
誤った考え方は「商にいつも1を足せば必要数になる」です。32個を8個ずつ入れると商4、余り0ですが、この規則は5箱と答えます。図3のように5箱目には物が入らず、空箱を数えています。

図3のように余りの条件を見直し、正のときに限って1を足します。修正後は入力32と8で 4 0 4、入力29と6で 4 5 5 です。前者で余分な箱を取り除き、後者では残りを収納する箱を保持できています。両方を再実行しないと、一方を直す過程で他方を壊したことを見逃します。
入力や実行が失敗するとき
上の短いコードは条件内の整数を直接設定するため、壊れた入力や外部の道具を処理しません。別のプログラムに組み込むなら、受け取る前提と失敗の返し方を決める必要があります。たとえば文字列を整数へ変換する際に数字でない文字が来た場合は変換を中止し、箱数として0を返さず入力エラーとして知らせます。0箱という正常な答えと失敗を混同しないためです。
除数0は割り算を実行すると例外になります。負の容量や負の個数、小数もこの場面の条件外なので、計算前に拒否します。例えば個数12、容量0は箱数を出さずエラー、個数-1、容量4もエラー、文字列「個数不明」もエラーと期待します。処理を作り替えた場合は、各入力についてエラーが返り、その後の表示や保存に進まないことを試します。正常例の32と8、29と6、0と8も再試行して、拒否の条件が正しい入力を巻き込まないことを確認します。
外部ファイルから個数を読む仕組みなら、ファイルが存在しない場合や途中で読めない場合も、箱数を確定せず読込失敗を返す設計にします。外部サービスを使う場合の時間切れも、結果が0件だったと解釈しません。失敗を再現できる代役を用意し、読込失敗と時間切れを各1回、正常な読込と正常な応答を各1回試し、返された状態と保存の有無を比べます。再試行する場合は回数を限定し、何度失敗したら終了するかも決めます。これらは拡張時の試験計画であり、上のコードが外部入出力を行った結果ではありません。
練習:先に5問を解く
- 消しゴムを7個ずつ袋に入れます。31個を収納する最小の袋数と、満杯の袋数、残りを整数で答えてください。
- 紙を9枚ずつ束ねます。45枚について満杯の束数、残り、収納に必要な束数を整数で答えてください。
- 1箱に11本入るペンが1本あります。満杯の箱数、残り、必要箱数を整数で答えてください。
- 札を赤、白、黄、紫の順に繰り返します。先頭を1番目とすると、27番目の色と0始まりの位置を答えてください。
- 1袋に5個入るビー玉が0個あります。必要袋数を整数で答え、容量0を指定された場合の扱いも述べてください。
練習の答えと照合
- 商4、余り3、必要袋数5です。7個を4袋に入れると28個で、残り3個を5袋目へ入れます。4袋の容量28個は31個に足りず、5袋の容量35個には収まります。計算による出力は
4 3 5です。 - 商5、余り0、必要束数5です。9枚を5束で45枚となり、残りはありません。4束では36枚分なので足りず、空の束を追加する必要もありません。出力は
5 0 5です。 - 商0、余り1、必要箱数1です。満杯の箱はありませんが、1本を1箱に入れられます。0箱の容量は0本なので不足します。出力は
0 1 1です。 - 27から1を引いた26を4で割ると商6、余り2です。位置2は黄色です。4枚の組6組が24枚、その次の赤、白、黄の3枚目が27番目で、場面にも戻せます。出力は
2 黄です。 - 0個なら商0、余り0で、必要袋数は0です。0袋に入れる個数も0個です。容量0は正という条件を満たさないので、箱数を出さず入力エラーとします。出力の期待値は正常時
0 0 0、条件外ではエラーです。
これらの数値は商と余りをPythonで求め、必要数は余りが正のときだけ1を加えて照合しました。周期も0始まりの位置に戻して照合しています。例外的な入力の期待値は、上の固定値のコードの実行結果ではなく、拡張した場合に求める振る舞いです。
覚えておくこと
商は満杯のまとまりの数、余りはその後に残る数です。
余りは0以上、除数未満です。
必要数には余りが正のときだけ1を加えます。
周期の1始まりの番号は1を引いてから余りを求めます。
答えを容量と元の個数に戻して検査します。
どこでつまずいたかを見分ける
商をそのまま必要箱数にした人には、余りの物をどこに置くかを説明してもらいます。常に1を足した人には、余り0の処理表で追加された箱の中身を尋ねます。個別指導では、入力、商、余り、追加の有無、最終数を順に書き、最初に場面と食い違う列を一緒に探します。
周期では、最初の番号と位置0を対応させる行を確認します。式を覚えたかよりも、最後の位置から先頭へ戻る境界を自分の言葉で説明できるかを見ます。箱に収まることと、1箱減らすと足りないことがそろって、最小の箱数が決まります。
収納数を求める別の式として、n に d から1を引いた数を加えてから d で割る方法もあります。ただし式を先に覚えるより、余りを使う理由を押さえると検算に役立ちます。n が d の倍数なら、加える数は d 未満なので商は変わりません。余りが1以上なら、余りと d から1を引いた数の合計は少なくとも d となり、商が1増えます。一方、余りは d 未満なので商が2以上増えることはありません。この説明も d が正で n が非負という条件を使っています。
例えば展示用の板が17枚で1箱に5枚入るとき、商3、余り2から4箱です。別の式では17に4を加えた21を5で割り、商4です。3箱分の15枚では2枚置き場がなく、4箱の容量20枚なら収まります。2つの式の答えが同じでも、両方で同じ入力を取り違える可能性があります。最後に元の枚数と容量へ戻す確認は省けません。
処理を別の人に渡すときは、箱数が「満杯の箱の数」か「端数も含めた必要数」かを出力名や説明で区別します。どちらも整数なので、表示だけでは意味を取り違えやすいためです。余り0で箱数が変わらない理由と、余りが正なら1箱で足りる理由を説明できれば、計算式を別の場面に移すときにも条件を点検できます。
読んで終わりにするか、ここから変えるか。
武蔵境駅徒歩30秒、講師1人に生徒1人の完全1対1。授業のあいだ、先生は隣を離れません。いまの詰まりを、無料相談でそのまま話してください。
まず15分だけ電話で話したい方は、無料電話相談(15分)から。塾からお電話を差し上げます。
本気になった日が、入塾の日。
お子様の教育、迷ったら「丸投げ」してください。必ず、期待以上の結果で返します。武蔵野で育む、武蔵境で学ぶ。
電話は年中無休。365日、24時間、お電話可能。




