ベルク・カッツェ |
頑張って数えたのに正解にならないと思ったら、なんか簡単な条件に変わってました。
一桁 9 二桁 72 三桁 9×8×6=432 1000台から7000台 192×7=1344 80XXから86XX 24×6=144 8697が2001番目 8695が2000番目 |
2月27日(木) 1:22:08
53850 |
ベルク・カッツェ |
あと問題文に一番小さいのが1とあったのでその前提で解きましたが、正しくは0が条件を満たす一番小さい整数だと思います。
それから、0〜9は2つの数をとれないのでそもそも条件に合わない気もしますね。 |
2月27日(木) 1:26:22
53851 |
ゴンとも |
十進Basic で1つめは4桁で何番目を出すのかで
FOR a=1 TO 9 if a<>9 then let s0=s0+1 FOR b=0 to 9 if b=a then goto 80 if a+b<>9 then let s1=s1+1 FOR c=0 to 9 if c=a or c=b then goto 70 if a+b<>9 and a+c<>9 and b+c<>9 then let s2=s2+1 FOR d=0 to 9 if d=a or d=b or d=c then goto 60 IF a+b<>9 AND a+c<>9 AND a+d<>9 AND b+c<>9 AND b+d<>9 AND c+d<>9 THEN LET s3=s3+1 60 next d 70 next c 80 next b 90 NEXT a PRINT s0;s1;s2;s3;2000-s0-s1-s2-1 END f9押して 8 72 432 1728 1487 より 2つめは 4桁で1487番目より FOR a=1 to 9 FOR b=0 to 9 if b=a then goto 30 FOR c=0 TO 9 IF c=a OR c=b THEN GOTO 20 FOR d=0 TO 9 IF d=a OR d=b OR d=c THEN GOTO 10 IF a+b=9 OR a+c=9 OR a+d=9 OR b+c=9 OR b+d=9 OR c+d=9 THEN GOTO 10 LET n=n+1 IF n=1487 THEN PRINT 10^3*a+10^2*b+10*c+d 10 next d 20 next c 30 next b 40 NEXT a END f9押して 8695・・・・・・(答え) |
豊川市
2月27日(木) 1:52:44
53852 |
ろろ |
一桁は2つの数を選べないので、9は条件を満たしていると考えるのですね。
どうしても答えが合わなくて苦労しました。 |
2月27日(木) 4:06:04
53853 |
「数学」小旅行 |
4桁になることをまずみつけて、192、24、4そして3を順に積み上げて2000にしました。 |
2月27日(木) 4:43:24
53854 |
スモークマン |
朝起きたら、条件が変わってましたのね ^^;
ベルク・カッツェ様と同様に考えました ^^ 同じ数字があってもよければ...2110になるのでしょうか??? 自信なし...^^; |
2月27日(木) 9:41:32
53855 |
清一 |
第1315回。 |
2月27日(木) 11:24:28
53857 |
「数学」小旅行 |
もっと良い方法があるのでは、、、ですが
def c(a) (a.include?(0)&a.include?(9))|(a.include?(1)&a.include?(8))|(a.include?(2)&a.include?(7))|(a.include?(3)&a.include?(6))|(a.include?(4)&a.include?(5)) end p (0..9).to_a.permutation(4).to_a.delete_if{|s|(s[0]==0)|c(s)}[2000-1-9-72-432] |
2月27日(木) 13:28:53
53858 |
手描き図面職人 |
chatGPTにプログラムを作成して貰いました。プログラムは、
def is_valid(num): digits=list(map(int,str(num))) if len(digits)!=len(set(digits)): return False for i in range(len(digits)): for j in range(i+1,len(digits)): if digits[i]+digits[j]==9: return False return True count=0 num=0 while count<2000: num+=1 if is_valid(num): count+=1 print(num) chatGPTは、凄いですね。 |
2月27日(木) 13:31:57
53859 |
「数学」小旅行 |
改良してワンラインにしました。
p (0..9).to_a.repeated_permutation(4).to_a.last(9999).map{|x|x.last(4-x.index{|t|t>0})}.delete_if{|s|(s.size!=s.uniq.size)|((0..s.size-1).to_a.combination(2).map{|y|(s[y[0]]+s[y[1]])==9}.inject(:|))}[1999] |
2月27日(木) 16:09:35
53860 |
「数学」小旅行 |
#53857 そうですね。
全然記憶にありませんでした。 掲示板を見て、この前の自分の解き方が今回の自分と全く逆であることに驚きました。 前回は上から下げていきましたが、今回は下から積み上げていくやり方でした。 おもしろいものですね。 |
2月27日(木) 16:22:41
53861 |
KawadaT |
ベルク・カッツェさんと同じ数え方です。
基本的考えは、9×8×6×4×2の五桁がマックス 上の桁から順に決めていきます。 一桁 9(二つは選べないが、緑🟢条件に合致すると考えて)通り 二桁 9×8=72通り 三桁 9×8×6=432通り 四桁7986まで、8×6×4×7=1344通り 8023から8697まで6×4×6=144通り 以上、合計して2001通りなので、 2000番目は、8697の一つ前である8695 |
2月27日(木) 17:40:34
53862 |
JUST_COMMUNICATION |
2000年の東大理系数学が元ネタですね。 |
2月28日(金) 20:59:55
53863 |
Mr.ダンディ |
「なんて面倒な問題」とおもいつつ 月曜日までねばり 3507とという値を送信しようとしたら
マサルさんの「お詫び」に気が付き愕然! 計算しなおしたらすぐに 8695に至るりました。 (一発入力で正解したのがせめてもの救い) |
茨木市
3月3日(月) 14:28:29
53864 |