takaisa
9*8*7*6*5/3=5040
   4月7日(木) 0:05:53     24827
Taro
全体の1/3だなぁとは見当がつきましたが、不安なので
解答送信後にプログラムで確かめました。
じたく・・・帰宅直後   4月7日(木) 0:06:39     24828
ミキティ
うう、遅すぎる。(T_T) #24827 の通りですよね。
何も考えずにプログラム組んじゃいました。
   4月7日(木) 0:07:00   HomePage:みきこむ  24829
そのうち勝つ
最初Cで考えて42送ってしまいました。
9P5のあと各桁の和を考えようと思いましたが
1〜9までそろっていることだし、平等に3分の1かなと即決しました。
アトランティスモード 魚群来い!   4月7日(木) 0:07:17     24830
はなう
あー、そうか。1/3かあ
あたりまえだ_| ̄|○

頑張って表書いて計算しました(一回間違ったし
とーきょ   4月7日(木) 0:08:01   HomePage:http://hanau.daa.jp/blog2/  24831
トトロ@N
A{1,4,7}、B{2,5,8}、C{3,6,9}の3グループに分ける。
A,B,Cの各グループから選ぶ個数で場合分けすると
(1,1,3)が9通り、(2,2,1)が27通り、(3,0,2)(0,3,2)が
各3通りなので、5×4×3×2×1×(9+27+3+3)=5040(通り)
兵庫県明石市   4月7日(木) 0:09:12   MAIL:h-sakai@zb3.so-net.ne.jp   24832
CRYING DOLPHIN
カードが「1枚ずつ」だから、本当はすんなり1/3とはいかないか…

3n型、(3n+1)型、(3n+2)型のカードが3枚ずつなので、カンで
1/3としてしまった…
1年ピカチュウ組   4月7日(木) 0:10:33   HomePage:算数の限界ってどのくらい?  24833
エルク
私も42送ってしまった・・・

(147、258、369)の3グループに分けて
それぞれから使う数字の数を考えると
(1,1,3)(3,0,2)(0,3,2)(2,2,1)が有って
それぞれ9、3、3、27通り。計42通りに
あとは(5!=120)かけて終わりと。
魔法の国   4月7日(木) 0:11:39   HomePage:迷いの森  24834
taku
1〜9を3で割ったあまりで考えて
あまり0は3,6,9
あまり1は1,4,7
あまり2は2,5,7
5桁で3の倍数になるのは
0,0,0,1,2のとき1080通り
0,0,1,1,1のとき360通り
0,0,2,2,2のとき360通り
0,1,1,2,2のとき3240通り
合計5040通り。
もう寝ます。
   4月7日(木) 0:12:24   MAIL:takuo@kcv.ne.jp   24835
エルク
トトロ@Nさんのと同じだ・・・
書き込み遅れるとむなしいね(汗
魔法の国   4月7日(木) 0:12:31   HomePage:迷いの森  24836
ゴンとも
十進BASIC で以下でした。3分くらいかかりました。
FOR A=1 TO 9
FOR B=1 TO 9
FOR C=1 TO 9
FOR D=1 TO 9
FOR E=1 TO 9
LET M=A+B+C+D+E
IF MOD(M,3)=0 AND A<>B AND A<>C AND A<>D AND A<>E AND B<>C AND B<>D AND B<>E AND C<>D AND C<>E AND D<>E THEN PRINT A;B;C;D;E
NEXT E
NEXT D
NEXT C
NEXT B
NEXT A
END
   4月7日(木) 0:12:39   MAIL:fttnm528@ybb.ne.jp   24837
姉小路
足して3になる物を全てあげると、42通りなので、
5!*42=5040 としました。
算数の街   4月7日(木) 0:15:29   MAIL:pctakada@mail.goo.ne.jp HomePage:高田の呟き  24838
taku
#24835の訂正
あまり2は2,5,8
(りゃんうーぱー)本当に寝ます。
   4月7日(木) 0:18:55   MAIL:takuo@kcv.ne.jp   24839
ipal
> FOR A=1 TO 9
> FOR B=1 TO 9
:
:
の"1"をずっと"0"でやってた...
   4月7日(木) 0:19:01     24840
linear
takuさんと同じやり方でした。ただ、1から9までのシグマは45=(3の倍数)に留意すれば、使わない4枚のカードの合計が3の倍数となればいいので、こちらを数えたほうが、いささか簡潔になります。方法を思いついてから正解まではおそらく2分もかからなかったと思います、最初に変なこと考えていたのがいけませんでした。
   4月7日(木) 0:19:53   MAIL:linearsupertrain@yahoo.co.jp   24841
linear
takuさんと同じやり方でした。ただ、1から9までのシグマは45=(3の倍数)に留意すれば、使わない4枚のカードの合計が3の倍数となればいいので、こちらを数えたほうが、いささか簡潔になります。方法を思いついてから正解まではおそらく2分もかからなかったと思います、最初に変なこと考えていたのがいけませんでした。
   4月7日(木) 0:21:45   MAIL:linearsupertrain@yahoo.co.jp   24842
tomh
#24832のトトロ@Nさんと同じで、
剰余類に分けて考えました。
新潟市   4月7日(木) 0:22:43   MAIL:tomh@yahoo.co.jp HomePage:H to M  24843
吉川@でんしゃ
帰宅中です。

 今回のは、3分の1決め打ちの人がいるだろうなーと思いつつ出題しました。

ちなみに選び出す枚数がある条件を満たすときは3分の1になるんですよね。
   4月7日(木) 0:23:02     24844
アヒーのおじさん
遅い割には9P5/3でした(^^;
最初も一瞬「3分の1かな?」とは感じたものの、地道に計算
更新してみると25秒でといているひとがいたので
「これはもう3分の1だなw 決まり!」みたいな感じで(苦笑)
アンドロメダ大星雲   4月7日(木) 0:37:07   HomePage:正体不明  24845
ノビッタ
初めて参加します。
僕も迷いつつ、3分の1で解いてしまいました。

ちなみに、これが「1から8までの数字」だったら、
一筋縄には行かなくなるのでしょうか。
鎌倉、の近く   4月7日(木) 1:05:20     24846
ゴンとも
#24846 #24837 のプログラムでloopの9を8に変え2400でしたが
そこよりも3の倍数は各桁の和が3の倍数だとそうなので
たいして難しくないような気がします。
3の倍数を7とか11に変える方が難しいじゃないかと・・・。
   4月7日(木) 1:16:44   MAIL:fttnm528@ybb.ne.jp   24847
万打無
 私もtakuさんと同じく各数字を3で割った時の余りでグループ分けし、その組み合わせを考えました。
 ただ、私は9枚の中から4枚残すと考えました。
 1から9までの整数の総和は45。
 選んだ5枚の数の総和が3の倍数だから、残す4枚の数の総和も3の倍数になる。

 その組み合わせは
 0,0,1,2 27通り
 0,1,1,1 3通り
 0,2,2,2 3通り
 1,1,2,2 9通り

 合わせて42通り。
 選んだ5枚を並べ替える組み合わせは5!=120通り。
 よって全ての組み合わせは 42×120=5040通り。
   4月7日(木) 8:12:26   MAIL:akkk@hi-net.ne.jp   24848
kasama
おはようございます(*^_^*)。

import java.util.*;
public class Question445 {
 public static void main(String[] args) {
  int count = 0;
  List list = new Permutation(Arrays.asList(new String[]{ // クラスPermutationは#18624を参照
   "1", "2", "3", "4", "5", "6", "7", "8", "9"}), 5).getList();
  for (Iterator iter = list.iterator(); iter.hasNext(); ) {
   List eList = (List) iter.next();
   StringBuffer sb = new StringBuffer();
   for (Iterator eIter = eList.iterator(); eIter.hasNext(); ) sb.append((String) eIter.next());
   if (Integer.parseInt(sb.toString()) % 3 == 0) ++count;
  }
  System.out.println(count);
 }
}
出先   4月7日(木) 9:15:08     24849
uchinyan
これはやさしい。
とはいえ、朝の忙しいときだったので、暗算でやったら、2回も計算違いしてしまいました (^^;
解法は、皆さんと同じですが、一応。
最初に、選ぶ数字の組み合わせを調べ、それらを5桁の数字とするために並べます。
まずは、選ぶ数字の組み合わせ。数字の和が3の倍数になればいいので、
選ぶ数字の中に3の倍数が3個ある場合: 1 * 3 * 3 = 9 通り
選ぶ数字の中に3の倍数が2個ある場合: 3 * (1 + 1) = 6 通り
選ぶ数字の中に3の倍数が1個ある場合: 3 * 3 * 3 = 27 通り
選ぶ数字の中に3の倍数が0個ある場合: 0 通り
となるので、組み合わせは、9 + 6 + 27 = 42 通り。
そこで、並べると、5桁の数字は、42 * 5! = 5040 通り。
ネコの住む家   4月7日(木) 9:21:34   MAIL:uchi@sco.bekkoame.ne.jp   24850
まるケン
おはようございます。
#24844
選び出す枚数が3の倍数の場合(3枚とか6枚の場合)は1/3にはならないんですね。
3の倍数は全504通り中180通りになります。
ちなみに、3で割って1あまる数、2余る数は、どちらも162通りです。
なかなか絶妙な数値設定だったんですね、9枚中5枚って。
   4月7日(木) 10:35:18   MAIL:take4310@mobile.email.ne.jp HomePage:まるケンの部屋  24851
みかん
いちいち5つの数字の組み合わせ126通りについて3の倍数かを考えるのは
面倒だな…ということで、当てずっぽうで3分の1としてごまかしちゃいました。
   4月7日(木) 10:45:11     24852
ハラギャーテイ
今回はやさしかった。一発正解は気持ちが良い。
北九州   4月7日(木) 10:46:42   HomePage:信号処理に挑戦  24853
???
次のプログラムにすると、少しは速いかな。試していないけど。
LET KOTAE=0
FOR A=1 TO 9
FOR B=1 TO 9
IF A<>B THEN
FOR C=1 TO 9
IF A<>C AND B<>C THEN
FOR D=1 TO 9
IF A<>D AND B<>D AND C<>D THEN
FOR E=3-MOD(A+B+C+D,3) TO 9 STEP 3
IF A<>E AND B<>E AND C<>E AND D<>E THEN
LET KOTAE=KOTAE+1
PRINT KOTAE;A;B;C;D;E
END IF
NEXT E
END IF
NEXT D
END IF
NEXT C
END IF
NEXT B
NEXT A
END
   4月7日(木) 12:14:21     24854
uchinyan
#24844
もう少し要領よくできそうですが、まぁ、大したことはないので実際に計算すると、
1 〜 9 が1枚ずつある場合、選ぶ枚数が、3の倍数では1/3にはならず、3の倍数でなければ1/3になりますね。
どなたかも書かれていたように、1 〜 9 までの和は 45 で、3の倍数なので、
k枚選んで3の倍数を作る場合の数字の組合せは、(9-k)枚選んで3の倍数を作る場合の数字の組合せと一致します。
そこで、k = 1, 2, 3, 4 を考えれば十分。実際に求めると...
1枚又は8枚選ぶ場合:数字の組合せは、3通り。3 * 1! = (9) * 1/3 or 3 * 8! = (9!/1!) * 1/3 なので、1/3。
2枚又は7枚選ぶ場合:数字の組合せは、12通り。12 * 2! = (9 * 8) * 1/3 or 12 * 7! = (9!/2!) * 1/3 なので、1/3。
3枚又は6枚選ぶ場合:数字の組合せは、30通り。30 * 3! not= (9 * 8 * 7) * 1/3 or 30 * 6! not= (9!/3!) * 1/3 なので、1/3 にならない。
4枚又は5枚選ぶ場合:数字の組合せは、42通り。42 * 4! = (9 * 8 * 7 * 6) * 1/3 or 42 * 5! != (9!/4!) * 1/3 なので、1/3。
そうそう、これがもれていました (^^;
9枚選ぶ場合:数字の組合せは、1通り。1 * 1! not= 1 * 1/3 なので、1/3 にならない。
0枚選ぶのは意味ありませんね。
というわけで、選ぶ枚数が3の倍数、3, 6, 9 の場合だけが1/3になりません。
最初から、今回の問題では、1/3になることいえるのかな? 
また、もう少し一般的に何かいえる? もっとも、問題をうまく拡張しないと題意がおかしくなりそうですが。

ネコの住む家   4月7日(木) 13:15:19   MAIL:uchi@sco.bekkoame.ne.jp   24855
tapu
9×8×7×6×5÷3
   4月7日(木) 13:04:03     24856
n厨
選ぶ枚数について違う
まだ遊べそうです
   4月7日(木) 15:22:32     24857
uchinyan
#24844 & #24855
特に、#24855
>最初から、今回の問題では、1/3になることいえるのかな? 
簡単でした (^^v
今、5個の数字を選んでその和が3の倍数になったとします。
それら5個の数字にそれぞれ +1 をします。9の場合には10になりますが、この場合には9だけずらして、1を対応させます。
明らかに、こうして得られた5個の数字に等しいものはありません。
さらにこれらの数字の和を取ると、+5 又は +5-9 = -4 だけ変化するので、和は3で割って2だけ余る数になります。
つまり、この5個の数字で作られる5桁の数字は、3で割ると2だけ余ります。
同様にして、和が3の倍数の5個の数字に -1 をし、0となった場合には9を対応させることにすると、
それらの数字はすべて異なり、その和は、-5 又は -5+9 = 4 だけ変化するので、3で割って1余る数になります。
これらの操作は、逆もいえるので、3の倍数、3で割って1余る数、3で割って2余る数の間に1対1の対応が存在します。
そこで、3の倍数の個数は、全体の1/3になり、9P5 * 1/3 = 9!/4! * 1/3 = (9 * 8 * 7 * 6 * 5)/3 = 5040 通り。
この操作は、選ぶ数字の個数が3の倍数でない場合には同様にうまく機能し、3の倍数の個数は全体の1/3になります。
なお、選ぶ数字の個数が3の倍数の場合には、選んだ数字の和は3の倍数しか増減しないので、うまく機能しません。
もっとも、これだけでは、3の倍数の個数が1/3に「ならない」ことの証明にはなりませんが。
また、選べる数字が、1 〜 9 ということも重要ですね。例えば、1 〜 8 ではうまく機能しません。
(追加)
かえって面倒になってしまいましたが...
選ぶ数字の枚数が3の倍数の場合、特に、3枚を選ぶ場合を考えます。6枚の場合でも同様です。
この場合、+1, -1 の操作によって、選んだ数字の和を3で割った余りは変わりません。
これは、この操作によって移り合う9組の3個の数字の組が、3で割った余りに関して同じ集合に属することを意味します。
したがって、選ばれた数字から作られる数、3の倍数、3で割って1余る数、3で割って2余る数それぞれの個数が、9の倍数になることを意味します。
そして、各桁の数字は、+1, -1 の操作で 1 〜 9 に変化します。そこで、例えば、下一桁の数字を 9 に固定できます。
このとき、作られる数の個数は、残る2桁を 1 〜 8 までの数字から作る場合の数を、9倍したものになります。
ところが、この2桁の数を作る数字の組合せは、8 * 7 / 2 = 28 通り(数として並べる場合はこの 2! 倍)で、
これが、3の倍数、3で割って1余る数、3で割って2余る数を作る数字の組合せの個数の和です。
つまり、作られる数が3の倍数となる場合は、この28通りの一部を、2倍し、さらに9倍したものでなければなりません。
したがって、28は3で割れないので、3の倍数の個数は全体の1/3にはなれません。
実際には、28 = 10 + 9 + 9 となり、3の倍数が 10 * 2 * 9 = 180 通り、3で割って1余る数が 9 * 2 * 9 = 162 通り、
3で割って1余る数は 9 * 2 * 9 = 162 通り、となります。
ネコの住む家   4月7日(木) 21:52:09   MAIL:uchi@sco.bekkoame.ne.jp   24858
いちたすには
0が3個、1が3個、2が3個
その中から5個とることにしました
   4月7日(木) 17:52:02     24859
ゴンとも
#24854 を十進basicで試しました。45秒でした。自分の #24837
45秒くらいですが。問題が桁が増えとしてloopが増えると自分のは駄目で
FOR の間に IF THEN をはさむですると対応するNEXT側 も END IF
ですか。ありがとうございます。真ん中だけIF THEN することしか知らず
繰り返しがおおすぎなのか止まる事がおおくてなんとかしたい
と思ってたんです。お手本としてメモ帳に保存(インターネット上の
問題は全て紙でなくメモ帳でやってます。)学ばせていただきます。では。
豊川市   4月7日(木) 18:10:52   MAIL:fttnm528@ybb.ne.jp   24860
スモークマン
そうか。わたしも剰余類で考えましたが・・・
1〜9の5個の数字で出来るものは、3で割って1余るものと2余るものと割り切れるものの数は同じはずだわね〜(直感!)
   4月7日(木) 23:32:05   MAIL:kennji72001@yahoo.co.jp   24861
uchinyan
いちたすには さんへ:(今回の問題には直接関係ないので、他の皆さん、ごめんなさい。)
この間の、シュタイナー点又はフェルマー点ですが、次のサイトを見つけました。
このサイトでは、「フェルマ点」になっていますが、かなり一般化できるようです。
http://aozoragakuen.sakura.ne.jp/taiwaN/p-geo/node2.html
私は知りませんでしたが、このサイト、ひょっとしたら有名なサイトかも。
高校レベルですが、面白いことがいろいろ書いてあります。
ネコの住む家   4月8日(金) 13:17:55   MAIL:uchi@sco.bekkoame.ne.jp   24862
K.N.I.F.E.
直感で
(9P5)/3=15120/3=5040
こんな式になりました。
   4月8日(金) 17:33:24     24865
K.N.I.F.E.
直感で
(9P5)/3=15120/3=5040
こんな式になりました。
   4月8日(金) 17:39:27     24866
航空アニマル
9*8*7*6*5=15120、15120から、3を割って5040、終了。簡単。
   4月8日(金) 23:11:56     24867
よーわからん
15120を3で割る理由をちゃんと説明して欲しいです
   4月8日(金) 23:26:45     24868
いちたすには
uchinyan様:(今回の問題には直接関係ないので、他の皆さん、ごめんなさい。)
まだシュタイナー点にこだわっていたのでありがたいです。
∠Cの大きさが異なるCB=CAの二等辺三角形をいくつか書いてみました。
∠Cを大きくしていくとシュタイナー点PはどんどんCに近づき
∠C=120°の時PはCに一致するのですが
私にはその軌跡が二点B,Cを通る円のように見えます。

楕円を使う別解証明に驚きました。別解にはいつも唖然とします。
考え方はよ〜く分かったのですが
「楕円の接線の性質」とやらがよく分からなかったりします。
   4月9日(土) 12:49:41     24869
吉川 マサル
#24868(よーわからん さん)
 3で割って良い理由ですが(ちなみに取り出す枚数が3と互いに素であるときは3で割って良いんですね)、uchinyanさんの#24858が簡明で分かりやすいかと思います。
PowerBook G4   4月9日(土) 12:59:38   MAIL:masaru-y@san su.org HomePage:算チャレ  24870
いちたすには
再びuchinyan様
「楕円の接線の性質」の件、了解です。ごめんなさい。
前回の書き込みは
「二定点B,Cをとる。動径AC(AC=BC)をCを中心に回転させ」の意です。
   4月9日(土) 14:24:59     24871
uchinyan
いちたすには さんへ:
#24869
>私にはその軌跡が二点B,Cを通る円のように見えます。
は、次のように考えれば、明らか、かと思います。
シュタイナー点の特徴にはいろいろありますが、いちたすにはさんが、以前にご指摘になった、
△ABCの各辺上にその辺を一辺とする正三角形を作り、その正三角形の△ABC以外の頂点と、
△ABCのその正三角形に含まれない頂点とを結んだ3本の直線の交点が、シュタイナー点になることを使います。
これら3本の直線が一点に交わることは、#24862のサイトの証明どおりですが(正三角形の場合はもっと簡単)、
ここで現れるシュタイナー点を通る円は、実は、各辺上の三つの正三角形それぞれの外接円になっており、
この三つの円がシュタイナー点で一点に交わっていることが分かります。
そうなると、例えば、BCを固定して、∠ACBを変化させた場合、これら三つの正三角形及び円とシュタイナー点との関係は、
少なくとも、∠ACB <= 120度までは変わらないし、BCは固定しているので、BCを通る円は固定されており、
シュタイナー点は、BCを通る先ほどの円上を動くことになります。
なお、楕円を使った証明は、私も新鮮でした。
通常の平面幾何は、円と多角形程度ですが、一般の二次曲線まで使うと、新たな視点が開けるかもしれませんね ^^/
ネコの住む家   4月10日(日) 14:24:13   MAIL:uchi@sco.bekkoame.ne.jp   24872
ぷー太郎
気合で書き出した
   4月11日(月) 16:21:35     24873
まるケン
#24860
プログラムの実行時間を語るには、マシンのスペックの条件が大事かと。
ちなみに、rubyでかいたプログラムをVictorのちっちゃいノートInterLink(PentiumM、1GHz)で走らせたところ、3.3秒くらいで出ました。
まだまだ速くできるところは残っていますが、以下にプログラムを晒します。
(段下げのために全角スペースを使ってます)

j = k = 0
(12345..98765).each do |i|
  (a=i.to_s.split('').uniq).delete('0')
  if(a.size == 5) then
    j += 1
    k += 1 if((i%3) == 0)
  end
end
p j, k

プログラムの解説:
数字が重複しようが0が入ろうが、全くかまわずに12345から98765までの連続した数字を作ります。(12345..98765)
そのそれぞれについて(each do ・・・ end)、数字を文字列に変換(to_s)し、構成する文字を一桁ずつばらし(split)、ここではじめて重複する文字を除き(uniq)、さらに'0'を取り除きます(delete)。
この結果の桁数(size)が、元の桁数(=5)と等しかった場合は、今回の問題で作れる数字であると言うことで、その総数(変数j)を1増やします。
また、この結果の数字が3で割り切れるならば、その総数(変数k)を1増やします。
全部終わったら結果の表示。(p)

Let's ruby!!
   4月12日(火) 10:22:46   MAIL:take4310@mobile.email.ne.jp HomePage:まるケンの部屋  24874
DrK
今回は、9つから5つを選ぶ方法で、合計が3の倍数になる組み合わせを考えればよい。
3で割って1余る数の集合、2余る数の集合、割り切れる数の集合に分ける。
3で割って1余る数と2余る数の数は同じになる。0個は3で割り切れる数が5個必要なため不可、3個の場合は合計が6個となるため不可。従って1個または2個となる。
1個づつの場合は、3×3×1=9
2個づつの場合は、3×3×3=27
それぞれの集合は3個あることから、3で割って余る数については3個全てを選ぶことも可能。この場合は、3で割り切れる数を2個選ぶことになる。
この場合は、どちらかの集合を選ぶことになり、
2×3=6
合計は9+27+6=42となる
これらの順列を考えればよく
42×5×4×3×2×1=5040が答え
今は廃墟   4月12日(火) 12:58:27   MAIL:satoka@star.odn.ne.jp   24875
吉川 マサル
#24874

 うちのPowerBook G4(800MHz、例のパチスロ大爆発で3年前買ったやつです)だと、4.75秒〜5.04秒くらいでした。time関数で計測する方法で良いのですかねぇ?(これだとrubyを起動する時間も含まれそうですが)
PowerBook G4   4月12日(火) 13:41:04   MAIL:masaru-y@san su.org HomePage:算チャレ  24876
ゴンとも
#24874

DREAMSYS の celeron の2.49GHz で2003年9月頃に本体
5万9800円でモニター付けて8万9800円でした。
(スぺックに値段は少し関係あると思ったんで値段も参考までに)   
豊川市   4月12日(火) 15:55:59   MAIL:fttnm528@ybb.ne.jp   24877
まるケン
#24876
あ、私のもtimeでの計測結果です。
rubyの起動時間等は、、、ま、誤差と言うことで。

ちなみに、#24874に晒したプログラムは、リアルタイムで挑戦したときのものでして、プログラムとしては直感的に考えられて、短く書けるっていうメリットの反面、決して効率のよいものではありませんでした。
#24837#24854をrubyで書き直したら、0.5秒とかで結果が出ました)

ということで、本日は会社にて「各種算術計算のアルゴリズムの調査および検証」というテーマで、もっと一般的な数字(mとnを与える)順列のプログラムなどをしてみました。そしたら、プログラムは長くなっちゃったけど、実行時間は0.85秒まで短縮できました。

例によって、全角スペース使ってます。

# pPc
# Permutation

def perm(a, c)
  if(c == 0) then
    return []
  end

  if(c == 1) then
    return a.map do |s| [s] ; end
  end

  r = Array.new
  a.size.times do
    j = a.shift
    r += perm(a, c-1).map do |s| s.insert(0, j); end
    a.push j
  end
  return r
end

if(ARGV.size < 2) then
  p = 9
  c = 5
else
  p = ARGV[0].to_i
  c = ARGV[1].to_i
end

a = (1..p).to_a
j = k = 0
perm(a, c).each do |s|
  j += 1
  k += 1 if (s.join('').to_i % 3 == 0)
end
p j, k

perm関数は、引数aに要素を羅列した配列、cにその中から選ぶ数を与えると、要素数cの配列の配列を返すってなことになってます。
与えられた配列の先頭の要素をshiftで取り除き、再帰呼び出しでさらに計算させ、使った要素はpushで最後尾に連結するってのがミソです。でも、そのせいで結果は辞書的順番ではなくなっちゃってますが、、、

% ruby perm.rb
とかすれば、今回の問題の答えが出るし、
% ruby perm.rb 9 3
なんてすれば、全体の1/3にならないケースの検証もできます。
   4月12日(火) 17:23:02   MAIL:take4310@mobile.email.ne.jp HomePage:まるケンの部屋  24878
まるケン
#24878
ひとりつっこみです。
permの返す結果を辞書的順番にするなら、再帰呼び出しするところでソートすればよいだけでOKでした。

r += perm(a, c-1).map do |s| s.insert(0, j); end
      ↓
r += perm(a.sort, c-1).map do |s| s.insert(0, j); end

   4月12日(火) 19:25:21   MAIL:take4310@mobile.email.ne.jp HomePage:まるケンの部屋  24879
きょろ文
9P5*1/3 簡単
理由は知らんけど…

すっかり忘れてた…

P.Sこの間夙川にお花見に行ってきたぞ!!
√2の隣   4月12日(火) 21:21:54   MAIL:kyorofumi@msn.com HomePage:きょろ文ランド  24880
ゆんななこ
足して15になるのが{1,2,3,4,5}で並び替えたら120とおり
18になるのが{1,2,3,4,8}と{1,2,3,5,7}と{1,2,4,5,6}で…
ってやってくと42セットでてきて、全部120ずつできるから、5040。
おうち   4月13日(水) 19:17:05   HomePage:ゆかんづめ  24881
吉川 マサル
これから帰宅します。例によって、電車の中で更新時刻を迎えることになるかと思いますので、順位表の更新は帰宅後(今日は12:30くらいかなぁ)になるかと思います。毎度申し訳ありません。m(__)m

# ミスがなければ良いのですが...。
PowerBook G4   4月13日(水) 23:39:07   MAIL:masaru-y@san su.org HomePage:算チャレ  24882