第2回 算数問題 解答

次のようにお金を持っているとき、お釣りをもらわないでちょっきり支払うことのできる金額は何通りでしょうか
 10000円札2枚 5000円札2枚 1000円札2枚 500円硬貨2枚 100円硬貨 2枚 50円硬貨2枚 10円硬貨2枚

解答1
 5000円札2枚と10000円札2枚では 5000円ごとにお金を払うことができますから、5000円札6枚持っていると考えてよい
1000円札2枚と500円硬貨2枚で500円ごとにお金を払うことができますから、500円硬貨6枚持っていると考えてよい
100円硬貨2枚と50円硬貨2枚で50円ごとにお金を払うことができますから、50円硬貨6枚持っていると考えてよい
5000円札6枚 500円硬貨6枚 50円硬貨6枚 10円硬貨2枚で払うことのできる金額は、
7×7×7×3−1=1028通り

解答2
(虚数さん)
 この数え方の逆転の発想的なところが気に入っています。このテクニックを私が知らなかっただけの話かもしれませんが…

dim x(0 to 3333)
for i=0 to 3333
   LET  x(i)=0
next I

for a=0 to 2
   for b=0 to 2
      for c=0 to 2
         for d=0 to 2
            for e=0 to 2
               for f=0 to 2
                  for g=0 to 2
                     LET  k=1000*a+500*b+100*c+50*d+10*e+5*f+g
                     LET  x(k)=1
                  next G
               next F
            next E
         next D
      next C
   next B
next A

LET  s=0
for i=1 to 3333
   if x(i)=1 then LET  s=s+1
next I
print s
end

解答3 (モルモット大臣さん)
数え上げの方法です。このように場合わけを丁寧にするとできますね。

10円、50円、100円までを使う組み合わせは20通り、
 10円、50円、100円、500円までを使う組み合わせは42通り。
    しかし500円2枚使用は 1000円1枚と同じなのでここではカウントせず、41通りとする。
    お札の時に1000円は数えることにする。
 従って1000円台と2000円台では1+41通りずつ、3000円台はもうすでに2枚の500円が使
用されており、それ以上500円が使用できないので1+20通りでここまで計146通り。
5000円台は1+146通りで5000円までを使う組み合わせは計293通り。
 1万円台と2万円台は1+293通りずつ、3万円台はもうすでに2枚の5000円が使用されており、
それ以上 5000円が使えないので1+146通り。
全部合計すると293+294+294+147=1028通りとなります

解答4 (浜田 明巳さん)
一太郎のマクロで作ってくれました。漢字で書くと見やすいですね。非日本人には通用しなくなりま
すが。いいものだったら、向こうの方から近づいて来るはずです(の、つもり)なんだそうです。
一太郎派の方はいらっしゃいますか??

!!算数.mcr
%個数=0
for %一万=0 to 2
  for %五千=0 to 2
    for %千=0 to 2
      for %五百=0 to 2
        for %百=0 to 2
          for %五十=0 to 2
            for %十=0 to 2
              %個数=%個数+1
              %金額(%個数)=10000*%一万+5000*%五千+1000*%千+500*%五百+100*%百+50*%五十+10*%十
              if %金額(%個数)=0 then
                %個数=%個数-1
              end if
            next
          next
        next
      next
    next
  next
next
for %j1=1 to %個数-1
  for %j2=%j1+1 to %個数
    if %金額(%j1)>%金額(%j2) then
      %金額(0)=%金額(%j1)
      %金額(%j1)=%金額(%j2)
      %金額(%j2)=%金額(0)
    end if
  next
next
%j1=1
do while %j1<%個数
  if %金額(%j1)=%金額(%j1+1) then
    for %j2=%j1+1 to %個数-1
      %金額(%j2)=%金額(%j2+1)
    next
    %個数=%個数-1
  else
    %j1=%j1+1
  end if
loop
for %j1=1 to %個数
  insert("個数="&%j1&" 金額="&%金額(%j1),1)
next
end