paizaオンラインハッカソン7(#_poh 7)にチャレンジしました!(後編)

By | Date : 2015/12/24 ( Last Update : 2018/12/15 ) | 229 views

カテゴリ : C# プログラミング タグ: , ,

こんにちはー!ニアです。

今回は「paizaオンラインハッカソン7(#_poh 7)にチャレンジしました!(前編)」の続きです。

使用した言語はC#です。

まだ解いていない方は、ネタバレに気を付けてね。

3. ランクB編

3.1. A1: 画像分析(メガネ)

標準入力から入力画像とパターン画像(どちらも値は0か1です)を読み取り、パターン画像と一致する入力画像の部分の左上の座標を出力します。

シンプルに、入力画像の左上から順にパターンマッチングして求めることができます。

3.2. A2: ケーキの分割(サンタ服)

標準入力からケーキのサイズ及びケーキを切る向きとその位置を読み取り、切り分けられたケーキの体積の最小値を出力します。

問題文より、ケーキを切る向きは「前面と平行な向き」または「側面と平行な向き」です。それぞれの切る位置を格納するリストを作り、切る位置及び左上と右下の位置をそれぞれ追加して昇順にソートします。そこから幅及び奥行きの長さの最小値を求め、それらと高さから切り分けられたケーキの体積の最小値を求めていきます。

4. ランクA編

4.1. A3: 大きな値の階乗の一部を算出(水着)

標準入力から値を読み取り、その階乗の下位9桁(末尾から続く0を除く)を出力します。

シンプルに読み取った値から1まで降順に掛けつつ、10で割り切れなくなるまで10で割って末尾から続く0を取り除き、10憶の余剰で下位9桁分を取り出していくと求まるのでは・・・と思いますが、このプログラムではテストケース4で失敗します。

また、1から順に掛けた場合、テストケース1で失敗します。

◆ 掛ける数に含まれる素因数から、2の数と5の数をカウントしよう

掛ける値に含まれる10の素因数こと2の数及び5の数をカウントアップし、その分だけで割ったものを掛けます。そしてカウントアップした2の数と5の数の差分だけ2(2の数が多い場合)もしくは5(5の数が多い場合)を掛けます。

POH7-A3

これですべてのテストケースをクリアしました。

◆ 階乗に含まれる素因数は、2の数 ≧ 5の数

2~100000の階乗に含まれる素因数を調べてみたところ、2の数の方が5の数より多いです。よって、先ほどのプログラムの29行目にあるif文に指定した条件式は、nが2以上であれば常に満たすので、37行目~43行目部分を省略しても問題ないです。

素因数分解2の数(1からの累積)5の数(1からの累積)
1100
221(1)0(0)
330(1)0(0)
42^22(3)0(0)
550(3)1(1)
62×31(4)0(1)
770(4)0(1)
82^33(7)0(1)
93^20(7)0(1)
102×51(8)1(2)
11110(8)0(2)
122^2×32(10)0(2)
13130(10)0(2)
142×71(11)0(2)
153×50(11)1(3)
162^44(15)0(3)
17170(15)0(3)
182×3^21(16)0(3)
19190(16)0(3)
202^2×52(18)1(4)
POH7-A3b
POH7-A3c

また、「paizaオンラインハッカソン7(#_poh 7)にチャレンジしました!(前編)」のH2で行ったひと工夫を活用してみましょう。掛ける数の素因数に含まれる5の数の分だけ2の数をカウントダウンすることで、2の数と5の数の差分を求めることができます。

単純そうに見えて、考えさせられる問題でした。

今回はC#でプログラミングしましたが、別の言語でもやってみようかな?

3. ところで、コーディネートはどんな感じ?

私のは髪を茶色のボブヘア、目をたれ目、服装をカーディガンで霧島さん(POH3・6)スタイルにコーディネートしました。

https://paiza.jp/poh/ando/share/9f831288

ando-ann

それでは、See you next!

この記事をシェアする
Chronoir.netのRSSフィードを購読する

About : ニア(Nia)

ゲーム系の開発&運用エンジニア(目指すはフルスタック)。主にC#(Unity)/PHPを使っています。最近はDockerやKubernetes、プライベートではAndroid Wearアプリやモバイルアプリ開発(Xamarin)を探求中。好物は紅茶とコーヒー、シラス丼、趣味は写真撮影と音ゲーです

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください