1円玉,5円玉,10円玉,50円玉,100円玉,500円玉の6種類全てを使い合計18枚で2006円にする。
但し,100円玉は2枚使用する。
新年一発目の問題。今年は正月休みが短かったせいか,正月用特別編成のパズルが無かったようだ。
6種類の硬貨を1枚ずつ使わなければならないので,一つの種類について最高13枚使う可能性がある。
ということは,単純に以下のようなループを作れば良い。
for( int i500=1; i500< 13; i500++) { for( int i100=1; i100< 13; i100++) { for( int i50=1; i50< 13; i50++) { for( int i10=1; i10< 13; i10++) { for( int i5=1; i5< 13; i5++) { for( int i1=1; i1< 13; i1++) { 18枚で2006円になったら発見。 } } } } } }
これだと解が4つ出力されてしまう。100円玉は2個使用するという条件を以下のようにする。
for( int i100=2; i100< 3; i100++)
135(≒100万)回のループになる。大したことは無いので,途中
if( i500*500+i100*100+i50*50+i10*10+i5*5 > 2006) break;
というような文を入れる必要もない(最初入れて作った)。
解は1件出力されました。
今年一年が楽しくプログラミングできる良い年でありますように。
解速度
即