AtCoderの過去問をDartで解いてみた~Part1~
本日は、@drkenさんの AtCoder に登録したら次にやること ~ これだけ解けば十分闘える!過去問精選 10 問 ~ の第一問目をDartで解いてみました。
第一問では
- 四則演算
- 倍数判定
がキーポイントになっております。
ABC 086 A - Product (100 点)
[問題]
二つの正整数 a,bの積が偶数か奇数か判定してください。
[解法]
import 'dart:io'; void main() { List ab = stdin .readLineSync() .split(" ") .map((x) => int.parse(x)) .toList(); // 一行に複数入力する方法 int c = ab[0] * ab[1]; if (c % 2 == 0) { // あまりで偶奇を判断する print("Even"); } else { print("Odd"); } }
解法としては、標準入力した積の余りから偶奇を判断します。
ABC 064 A - RGB Cards
[問題]
赤、緑、青色のカードを持っています。
それぞれのカードには 1以上 9以下の整数が書かれています。
3つのカードを左から順に赤、緑、青色の順に並べ、左から整数を読んだときにこれが 4の倍数であるか判定しなさい。
[解法]
import 'dart:io'; void main() { List rgb = stdin.readLineSync().split(" ").map((x) => int.parse(x)).toList(); int sum = rgb[0] * 100 + rgb[1] * 10 + rgb[2]; // カードの整数を各桁に設置する if (sum % 4 == 0) { print("YES"); } else { print("NO"); } }
解法としては、カードの整数を各桁に設置して、4で割った余りから判断します。
ABC 088 A - Infinite Coins
[問題]
1円硬貨をA枚と500円硬貨を無限枚持っています。
これらの硬貨だけを使うことによって、ちょうどN円を支払うことができるかを判定しなさい。
[解法]
import 'dart:io'; void main() { int n = int.parse(stdin.readLineSync()); int a = int.parse(stdin.readLineSync()); int ans = n % 500; if (ans <= a) { print("Yes"); } else print("No"); }
解法としては、持っている500円硬貨は無数個なので余りのみ考えれば良いことになります。
ABC 157 A - Duplex Printing
[問題]
全Nページから成る書類を両面印刷します。両面印刷では1枚の紙に2ページ分のデータを印刷することが出来ます。
最小で何枚の紙が必要か求めてください。
[解法]
import 'dart:io'; void main() { int n = int.parse(stdin.readLineSync()); int ans0 = (n / 2).floor(); int ans1 = n % 2; if (ans1 == 0) { print(ans0); } else print(ans0 + 1);// 余りが出たら1ページ足す }
ceil()を使っても良かったかもしれません。