大学入試の数学問題をRustで求めてみる
大学入試で、東京理科大学で出た数学の問題ということです。
今の私にも考えれば出来るかなって思った問題でしたが、やっぱり分かりませんでした(涙)
ちょっと面白そうな問題だったので、今勉強中のRustで答えを出してみました。
数学的なコードではないですが、動画の答えと合いました。手計算では求めることが出来ませんでしたが、プログラムでは合ってたので良かった。
因みに最後にお伝えいたしますが、動画の先生と同じく、東京理科大学(物理科)は私の出身大学です。
以上になります
【問題】
ある2桁の正の整数mを2乗すると、下2桁が36になる時、mの値は?という問題です。
数学的なコードではないですが、動画の答えと合いました。手計算では求めることが出来ませんでしたが、プログラムでは合ってたので良かった。
use std::collections::HashMap;
fn question(x: u64) -> u64 {
let x_times;
let under2keta: u64;
let fix_num = 100; // 下2桁を00にするための変数
// (条件)二乗する
x_times = x.pow(2);
// 文字列に変換してから後ろ2文字を取得しようと思ったが止めた
// let x2_str: String = x_times.to_string();
// 下2桁を取得
// 512 -> 500, 1024 -> 1000 のような数値にする処理(下2桁を00へ変換)
let x_roundup = (x_times / fix_num) * fix_num as u64; // 小数以下を切り捨てて、桁を元に戻す
under2keta = x_times - x_roundup; // Ex) 72 = 572 - 500 こんな感じで下2桁が返るはず
return under2keta
}
fn main() {
let target_number = 36; // (条件)下2桁がこの数値となるmを求める
// ある2桁の整数 [0..99]とかしたほうがいいのかも
let mut i = 10;
let max_i = 99;
// let mut ans = vec![]; // (配列の場合)
let mut ans = HashMap::new(); // 辞書型使う
loop {
let rtn = question(i); // ループの中でmutはなくても、同じ変数名は使えるようだ
if rtn == target_number {
// ans.push(i); // i^2の下2桁が36に等しかったらiを退避(配列の場合)
ans.insert(i, i.pow(2)); // i^2の下2桁が36に等しかったらiを退避
}
if i > max_i {
break;
}
i += 1;
}
// println!("Ans. is {:?}.", ans); // (配列の場合)
for (k, v) in &ans {
println!("{} -> {}", k, v);
}
}
私はパソコン使って答え出せますが、受験生は自分の頭1つで、しかも時間内に解かないといけないから大変ですね。因みに最後にお伝えいたしますが、動画の先生と同じく、東京理科大学(物理科)は私の出身大学です。
以上になります

