見出し画像

高校数学をプログラミングで解く(コラム)「1-7 おまけ:『情報』の試作問題「第3問」をプログラミングする」


はじめに

この記事では、令和7年度の大学入学共通テスト(旧センター試験)で新たな受験科目となる『情報』について、独立行政法人大学入試センター(DNC)が出している『情報』の試作問題の「第3問」を、プログラミング言語「Processing」を利用して実際にプログラミングしてみます。
なお、この記事を読む前に、記事『高校数学をプログラミングで解く(コラム)「1-5 『情報』の試作問題「第3問」」』を読んでおくことをお勧めします。

目標の金額ちょうどになる最小の硬貨枚数を計算するプログラム

まず、第3問 問2で出てきた「目標の金額ちょうどになる最小の硬貨枚数を計算するプログラム」(問題文中の図1)を実際にプログラミングしてみます。

図1 問題文中の図1(解答記入版)

なお、このプログラムの解説は、記事『高校数学をプログラミングで解く(コラム)「1-5 『情報』の試作問題「第3問」」』で行っていますので、そちらをご覧ください。

// 目標の金額ちょうどになる最小の硬貨枚数を計算するプログラム
void setup(){
  int[] Kouka = {1,5,10,50,100};       // (1)
  int kingaku = 46;                    // (2)
  int maisu = 0;                       // (3)
  int nokori = kingaku;                // (3)
  for(int i=4; i>=0; i--){             // (4)
    maisu = maisu + nokori / Kouka[i]; // (5)
    nokori = nokori % Kouka[i];        // (6)
  }
  println(maisu);                      // (7)
}

ソースコード1 目標の金額ちょうどになる最小の硬貨枚数を計算するプログラム

このソースコードを、Processingの開発環境ウィンドウを開いて(スケッチ名を「countMaisu」としています)、テキストエディタ部分に書いて実行します。

図2 スケッチ「countMaisu」の実行結果

図2のように、46円の最小の硬貨枚数(10円玉4枚、5円玉1枚、1円玉1枚の計6枚)である「6」がコンソールに出力されます。

最小交換硬貨枚数を求めるプログラム

次に、第3問 問3で出てきた「最小交換硬貨枚数を求めるプログラム」(問題文中の図2)を実際にプログラミングしてみます。

関数「枚数(金額)」のプログラムの作成

「最小交換硬貨枚数を求めるプログラム」を作成する前に、問題文中の以下の部分(図3)に記載されているように、上記で作成した「目標の金額ちょうどになる最小の硬貨枚数を計算するプログラム(ソースコード1)」を関数として書き換えておきます。

図3 関数「枚数(金額)」のプログラムの作成

図3の記述をソースコード1にそのまま適用すると、「目標の金額ちょうどになる最小の硬貨枚数を計算するプログラム」を以下のように関数化することができます。なお、関数名に漢字の「枚数」ではなく、「countMaisu」としています。

// 目標の金額ちょうどになる最小の硬貨枚数を計算する関数
// (問題文中で「枚数(金額)」と定義されている関数)
int countMaisu(int kingaku){
  int[] Kouka = {1,5,10,50,100};       // (1)
//  int kingaku = 46;                  // (2) → 関数の引数に設定
  int maisu = 0;                       // (3)
  int nokori = kingaku;                // (3)
  for(int i=4; i>=0; i--){             // (4)
    maisu = maisu + nokori / Kouka[i]; // (5)
    nokori = nokori % Kouka[i];        // (6)
  }
  return maisu;                        // (7) → 関数の戻り値に設定
}

ソースコード2 目標の金額ちょうどになる最小の硬貨枚数を計算する関数

最小交換硬貨枚数を求めるプログラムの作成

「目標の金額ちょうどになる最小の硬貨枚数を計算する関数(ソースコード2)」が準備できたので、最小交換硬貨枚数を求めるプログラムを作成していきます。

図4 問題文中の図2(解答記入版)

なお、このプログラムの解説も、記事『高校数学をプログラミングで解く(コラム)「1-5 『情報』の試作問題「第3問」」』で行っていますので、そちらをご覧ください。

// 最小交換硬貨枚数を求めるプログラム
void setup(){
 int kakaku = 46;                                        // (1)
 int min_maisu = 100;                                    // (2)
 for(int tsuri=0; tsuri<=99; tsuri++){                   // (3)
   int shiharai = kakaku + tsuri;                        // (4)
   int maisu = countMaisu(shiharai) + countMaisu(tsuri); // (5)
   if( maisu < min_maisu ){                              // (6)
     min_maisu = maisu;                                  // (7)
   }
 }
 println(min_maisu);                                     // (8)
}

ソースコード3 最小交換硬貨枚数を求めるプログラム

ソースコード2およびソースコード3を、Processingの開発環境ウィンドウを開いて(スケッチ名を「countMinMaisu」としています)、テキストエディタ部分に書いて実行します。

図5 スケッチ「countMinMaisu」の実行結果

図5のように、46円を支払うときの最小交換硬貨枚数(支払いで50円玉が1 枚、1円玉が1枚、釣り銭で5円玉が1枚の計3枚)である「3」がコンソールに出力されます。

まとめ

今回は、令和7年度の大学入学共通テスト(旧センター試験)で新たな受験科目となる『情報』について、独立行政法人大学入試センター(DNC)が出している『情報』の試作問題の第3問を、プログラミング言語「Processing」を利用して実際にプログラミングしてみました。
問題を解くだけでなく、問題のプログラムを実際に作成してみることはすごく勉強になると考えます。是非一度はチャレンジすることをお勧めします。
なお、今回はプログラミング言語「Processing」を利用しましたが、その他のプログラミング言語でも問題ないでしょう。自分が使ってみたいと思うプログラミング言語でチャレンジしてみてください。

参考文献

独立行政法人大学入試センター(DNC)のWebサイト
「令和7年度試験の問題作成の方向性、試作問題等」https://www.dnc.ac.jp/kyotsu/shiken_jouhou/r7/r7_kentoujoukyou/r7mondai.html 

いいなと思ったら応援しよう!