ベルク・カッツェ |
111、222、・・・、999、1000で10か所
11・12、22、23、・・・88・89で8か所 989・990で1か所 19か所になりました。 |
4月6日(木) 0:15:28
52331 |
Mr.ダンディ |
11,12..22,23..33,34..44,45..55,56..66,67..77,78..88,89...
111.112...222...333.444..555.666...777...888..999...1000.. 899,900 以上 19か所 (はじめ 最後の2か所を抜かしていました) |
茨木市
4月6日(木) 0:17:52
52332 |
ベルク・カッツェ |
□11・□12
11□・11▽ このパターンは□=1しかないので他にはないはずです。 |
4月6日(木) 0:18:08
52333 |
ドリトル |
000・・・(1000)
111・・・(11、12)、(111、112) 222・・・(22、23)、(222、223) (中略) 888・・・(88、89)、(888、889) 999・・・(899、900)、(989、990)、(999) で少なくとも20通りあると思うのですが、何か間違っているでしょうか・・・ |
4月6日(木) 0:18:17
52334 |
CRYING DOLPHIN |
区切る場所を考慮する桁ばらしがついに算チャレに上陸かぁ |
顔上げた道の先
4月6日(木) 0:22:20
MAIL:ぴかー HomePage:ぴかぴかさんすう。 52335 |
Jママ |
ドリトルさんが正しいと思います
私は989,990を抜かしておりました。 |
4月6日(木) 0:22:59
52336 |
スモークマン |
11/12
22/23 33/34 44/45 55/56 66/67 77/78 88/89 111/112 222/223 333/334 444/445 555/556 666/667 777/778 888/889 899/900 989/900 999 1000 そうか!!やっぱり8+12=20 ですね ^^; 2回目に12+9=21で送ったりしてましたけど...^^;; |
4月6日(木) 0:46:02
52337 |
スモークマン |
989/990
の間違い ^^;;; ↓ |
4月6日(木) 0:47:21
52338 |
Mr.ダンディ |
なるほど
989,990 もあったか...すると20か所が正解ですね。 |
茨木市
4月6日(木) 1:18:38
52339 |
みかん |
注意すべきなのは
・桁をばらす前に複数の数にまたがっている部分(11、12)や(111、112) ・一の位が9→0に繰り上がるところ なんだけど、やっぱり数え落としました。 単純な問題なんだけどけっこう間違える、という点ではいい問題ですね。 桁ばらし問題で ・1000個目の数字は何か? ・1000個目までの数字の和は? ・先頭からの数字の和が1000を超えるのは何個目の数字か? は見かけるような気がするけれど、今回のようなのは見ないのはなぜなんでしょう。 「解法を知っていれば簡単、知らないと解けない」から? (#52329) >断頭三角柱の公式は知ってること前提 今年の開成の問題がまさにそのパターン。「2回切断→ダブり部分を差引き」の 定石通りに解くなら、断頭三角形の公式が必要。知らなくても分割方法を変えれば もちろん解けるけれど、知っていれば有利。出題側も「みんな塾で対策してきて いるんだろ?」といったところかも。過去問の解説が公式前提で解説しているか 気になります。 三菱問題は灘の問題でしたか。出典が書いてあれば「さすが灘の問題、いい問題 だったね~」と当時は言っていただろうなぁ。初見では解けなかったので、完全に 負け惜しみなんですが。 |
4月6日(木) 1:23:20
52340 |
ベルク・カッツェ |
899・900がありましたか。見落としていました。 |
4月6日(木) 1:48:20
52341 |
紫の薔薇の人 |
桁上がりの問題だから、ロジックが確定して、何とか書き出せる3進法
であたりをつける方法でないと見落としますね。 3進法 1 2 10 11 12★(10進法ならば、AA|AB型の8通りのパターン) 20 21 22 100 101 102 110 111 112★(10進法ならば、AAA|AAB型の8通りのパターン) 120 121 122 200★(10進法ならば、899|900の1通りのパターン) 201 202 210 211 212 220★(10進法ならば、989|990の1通りのパターン) 221 222★(10進法ならば、999の1通りのパターン) 1000★(10進法ならば、1000の1通りのパターン) |
4月6日(木) 3:14:29
52342 |
「数学」小旅行 |
#52341
同じく、やられました。 |
4月6日(木) 7:08:37
52343 |
量子論 |
だいぶ前に20で送った気が....
ただ、不正解だったので なんでなん? といろいろ考えてました。 まさかと思って、19にしたらここに入れました。 一応、19を送って正解の仲間に入っておきます。 |
4月6日(木) 9:23:34
52344 |
ドリトル |
やはり20でしたか。
マサルさんにこの掲示板を見て、正解を変更していただけるよう答えを再送信しておきました。 でもまだ19のままですね・・・ っていうか、最初3個「以上」を見逃していたのでもし答えが20になってもあまり順位良くないかな・・・(汗) |
4月6日(木) 9:49:57
52345 |
ベルク・カッツェ |
改めて夕べの反省を。
繰上りがあるからその前後はしっかり確認すべきでした。 今回は□99ですね。 |
4月6日(木) 12:36:56
52346 |
ゴンとも |
1000までなく10000でも100000でも1億でもプログラムなら
根こそぎできると思いますが・・・ とりあえず1000まで十進Basic で FOR a=10 TO 97 LET b=IP(a/10) LET c=10*FP(a/10) LET d=IP((a+1)/10) let e=10*fp((a+1)/10) IF (b=c AND c=d) OR (c=d AND d=e) THEN PRINT a;a+1 next a END f9押して 11 12 22 23 33 34 44 45 55 56 66 67 77 78 88 89 FOR e=100 TO 996 LET f=IP(e/100) LET g=(e-100*IP(e/100)-10*FP(e/10))/10 LET h=10*fp(e/10) LET i=IP((e+1)/100) LET j=(e+1-100*IP((e+1)/100)-10*FP((e+1)/10))/10 LET k=10*FP((e+1)/10) IF (f=g AND g=h) OR (g=h AND h=i) OR (h=i AND i=j) THEN PRINT e;e+1 NEXT e END f9押して 111 112 222 223 333 334 444 445 555 556 666 667 777 778 888 889 899 900 989 990 と999 1000 で20個・・・・・・(答え) |
豊川市
4月6日(木) 16:59:59
MAIL:fttnm528@ybb.ne.jp 52347 |
「数学」小旅行 |
出来合いですが、rubyで、
a=(1..1000).to_a.to_s.delete(", ") p (0..9).map{|i|a.scan(i.to_s+i.to_s+i.to_s)}.flatten.count で、20個です。 |
4月6日(木) 17:09:54
52348 |
「数学」小旅行 |
#52348 でもこれは、同じ数字が6個以上並ぶところがあると間違った結果になるので注意です。 |
4月6日(木) 17:18:07
52349 |
ゴンとも |
#52347
自己レスですみません!! >1000までなく10000でも100000でも1億でもプログラムなら >根こそぎできると思いますが・・・ >とりあえず1000まで十進Basic で 4桁で十進Basic で FOR l=1001 TO 9998 LET m=IP(l/1000) LET n=(l-1000*IP(l/1000)-100*FP(l/100))/100 LET o=(l-100*IP(l/100)-10*FP(l/10))/10 LET p=10*fp(l/10) LET q=IP((l+1)/1000) LET r=(l+1-1000*IP((l+1)/1000)-100*FP((l+1)/100))/100 LET s=(l+1-100*IP((l+1)/100)-10*FP((l+1)/10))/10 LET t=10*fp((l+1)/10) IF (m=n AND n=o AND o=p-1) THEN GOTO 10 IF (m=n AND n=o) OR (n=o AND o=p) OR (o=p AND p=q) OR (p=q AND q=r) THEN LET u=u+1 10 NEXT l PRINT u+2 END f9押して325より 10000(1万)までなら345でしょうか? 誰かやった人がいたらお願いします!! とりあえず次は100000(10万)やってみます!! |
豊川市
4月6日(木) 19:39:29
MAIL:fttnm528@ybb.ne.jp 52350 |
「数学」小旅行 |
#52350
a=(1..10000).to_a.to_s.delete(", ") b=(0..9).map{|i|a.scan(i.to_s*9)}.flatten.count c=(0..9).map{|i|a.scan(i.to_s*6)}.flatten.count p (0..9).map{|i|a.scan(i.to_s*3)}.flatten.count-b-c こんなふうにしてみたけど、・・・344がでました。?? 100,000では、 a=(1..100000).to_a.to_s.delete(", ") b=(0..9).map{|i|a.scan(i.to_s*9)}.flatten.count c=(0..9).map{|i|a.scan(i.to_s*6)}.flatten.count p (0..9).map{|i|a.scan(i.to_s*3)}.flatten.count-b-c で4394がでました。??自信はなし。 |
4月7日(金) 8:36:48
52351 |
ゴンとも |
#52347
#52350 #52351 すみません自分の方が間違えで345でなく344でした!! 自分のコードで通り数でなく並べる数値をだして 9989 9990 9991 をつないで 998999909991で一箇所ダブルカウントで・・・ どうやら数値が大きくなると難易度があがり求めがたいんだと わかりました!!ありがとうございました!! |
豊川市
4月7日(金) 12:03:44
MAIL:fttnm528@ybb.ne.jp 52352 |
みかん |
今回の問題、1~10000だと何回なのか?
まずは1000~10000の場合を考えました。いずれも桁ばらしをする前に小さい数の 方を基準。 (1)0が3連続以上 1000、2000、3000、…10000 の10回 (2)1が3連続以上 A、111□ の場合 1110、1111、1112、…1119 の10回 B、□□□1、11□□ の場合 1101、1111、1121、…1191 の10回 C、□□11、1□□□ の場合 1011、1111、1211、…1911 の10回 D、□111 の場合 1111、2111、3111、…9111 の9回 ただし 「1111、1112」 のパターンを Aで2回、B~Dで各1回=5回 カウントしているので、ダブりを引いて 10+10+10+9-4=35回 (3)2~8が3連続以上 …(2)の場合と同様なので、35×7=245回 (4)9が3連続以上 A、999□ の場合 9990、9991、9992、…9999 の10回 B、□□□9、99□□ の場合 9899、9909、9919、…9989 の10回 C、□□99、9□□□ の場合 8999、9099、9199、…9899 の10回 D、□999 の場合 1999、2999、3999、…9999 の9回 ただし、 「9999」を AとDで2回カウント 「9989、9990」を AとBで2回カウント 「9899、9900」を BとCで2回カウント 「8999、9000」を CとDで2回カウント しているので、ダブりを引いて 10+10+10+9-(1×4)=35回 (1)~(4)より、1000~10000の場合 10+35+245+35=325回 1~999の場合は19回と分かっているので、 325+19=344回、でどうでしょうか? |
4月7日(金) 12:50:37
52353 |
吉川 マサル |
すみません、当初は「999まで」だったのを、えいや、と「1000まで」にしていたのを忘れて、そのままになっていました...。これから、修正いたします。m(_ _)m |
会社とか
4月7日(金) 16:20:56
HomePage:アリーナ 52354 |
げほげほ |
修正お疲れさまです。まず20を送って、順位表に載らないのを見て
即座に19を投げるという不躾なプレイングをしたことお詫びします。^^; さて、贖罪というわけではありませんが 一般化を調べる流れっぽいので、自分もプログラムを書いてみました。 1からNまでを繋げた文字列で、同じ数字がK回以上続くカタマリを数えます。 (今回の問題の場合N=1000、K=3なので、CASE(1000,3)が対応します。) <script> function CASE(N, K){ let s="", ans=(N>=1&&K==1)?1:0; for(let i=1; i<=N; i++){ s+=String(i); } for(let i=0; i<s.length-K; i++){ if(s.charAt(i)==s.charAt(i+1)){ continue; } let flag=true; for(let j=1; j<K; j++){ if(s.charAt(i+j)!=s.charAt(i+j+1)){ flag=false; } } if(flag){ ans++; } } alert(ans); } CASE(1000, 3); </script> JavaScriptなので、メモ帳にコピペしてHTML形式で保存し、ブラウザで開けば どなたでも使えます。CASE(1000, 3);の部分をいろいろ書き換えてみてください。 なお CASE(1000, 3)の結果は20回 CASE(10000, 3)の結果は344回 CASE(100000, 3)の結果は4394回 CASE(1000000, 3)の結果は52994回 CASE(10000000, 3)の結果は619994回 になりました。 注:N=100000000は扱える文字列のサイズを超え、エラーします。 |
プププランド
4月7日(金) 17:33:55
HomePage:ツイッター 52355 |
syokyuhsya |
パイソンプログラムで解いてみました。プログラムは
import re a='1' for i in range(2,1001): a=a+str(i) print(a) match_list1=re.findall(r"1{3,}",a) match_list2=re.findall(r"2{3,}",a) match_list3=re.findall(r"3{3,}",a) match_list4=re.findall(r"4{3,}",a) match_list5=re.findall(r"5{3,}",a) match_list6=re.findall(r"6{3,}",a) match_list7=re.findall(r"7{3,}",a) match_list8=re.findall(r"8{3,}",a) match_list9=re.findall(r"9{3,}",a) match_list0=re.findall(r"0{3,}",a) print(match_list1) print(match_list2) print(match_list3) print(match_list4) print(match_list5) print(match_list6) print(match_list7) print(match_list8) print(match_list9) print(match_list0) |
4月7日(金) 18:59:26
52356 |
手描き図面職人 |
インデントを忘れていました。
import re a='1' for i in range(2,1001): a=a+str(i) a1=re.findall(r"1{3,}",a) a2=re.findall(r"2{3,}",a) a3=re.findall(r"3{3,}",a) a4=re.findall(r"4{3,}",a) a5=re.findall(r"5{3,}",a) a6=re.findall(r"6{3,}",a) a7=re.findall(r"7{3,}",a) a8=re.findall(r"8{3,}",a) a9=re.findall(r"9{3,}",a) a0=re.findall(r"0{3,}",a) answer=len(a1)+len(a2)+len(a3)+len(a4)+len(a5)+len(a6)+len(a7)+len(a8)+len(a9)+len(a0) print(answer) |
4月7日(金) 20:22:58
52357 |
まーじまさーん |
19と入力してここに入って初めて間違いに気付きました。出直します。 |
バランスを取らなくっちゃなぁ!!
4月7日(金) 21:34:22
HomePage:ツイッターで色々やっている 52358 |
手描き図面職人 |
プログラムにコメントを追加しました。
import re a='1' # 巨大な整数aの制作 for i in range(2,1001): a=a+str(i) print(a) # 巨大な整数aを出力 a1=len(re.findall(r"1{3,}",a)) # aで整数1が3個以上連続する個数 a2=len(re.findall(r"2{3,}",a)) # aで整数2が3個以上連続する個数 a3=len(re.findall(r"3{3,}",a)) # aで整数3が3個以上連続する個数 a4=len(re.findall(r"4{3,}",a)) # aで整数4が3個以上連続する個数 a5=len(re.findall(r"5{3,}",a)) # aで整数5が3個以上連続する個数 a6=len(re.findall(r"6{3,}",a)) # aで整数6が3個以上連続する個数 a7=len(re.findall(r"7{3,}",a)) # aで整数7が3個以上連続する個数 a8=len(re.findall(r"8{3,}",a)) # aで整数8が3個以上連続する個数 a9=len(re.findall(r"9{3,}",a)) # aで整数9が3個以上連続する個数 a0=len(re.findall(r"0{3,}",a)) # aで数0が3個以上連続する個数 answer=a1+a2+a3+a4+a5+a6+a7+a8+a9+a0 # 以上の個数を合計 print(answer) # 合計した個数の出力 |
4月8日(土) 15:59:26
52359 |
いちごみるく |
c++で
int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int n, m; cin >> n >> m; string s; for (int i = 1; i < n + 1; ++i) s += to_string(i); int ans = 0; for (int i = 0; i < s.size();) { int j = i + 1; while ((j < s.size()) && (s[i] == s[j])) { j++; } if (j - i >= m)ans++; i = j; } cout << ans << endl; return 0; } |
4月8日(土) 18:26:35
52360 |
まるケン |
先頭から1文字ずつ取り出して順次処理し、文字列がなくなったら次の数を付け足す、、、
というやり方で、100000000、1000000000 までを試してみました。 それぞれ、7099994回、79999994回 って出ました。 |
4月9日(日) 18:42:26
MAIL:take4310@mobile.email.ne.jp 52361 |
「数学」小旅行 |
#52361 この手法(まるケンさんに感謝)をRubyでやると、
n=0;l=100000000;k=3;sl="0";c=1 for i in (1..l) s=i.to_s for j in (0..s.size-1) if sl!=s[j,1] then if c>=k then n+=1 end;sl=s[j,1];c=1 else c+=1 end end end if c>=k then n+=1 end p n 7099994で、同じになりました。でもずいぶんと時間がかかりました。 |
4月10日(月) 10:20:06
52362 |
「数学」小旅行 |
さらに、1000,000,000では、時間を計ってみました。
約3368秒すなわち約56分かかって、79999994を得ました。 もうやめておきます。 |
4月10日(月) 11:07:52
52363 |
まるケン |
そうそう、普通そこでやめるよね。
8時間ほどかけて、こんなん出ました。 10000000000, 889999994 さすがにもうやめます。 |
4月10日(月) 18:45:17
MAIL:take4310@mobile.email.ne.jp 52364 |
手描き図面職人 |
chatgptにコピーアンドペーストしてみましたがやはり20という答えが、返ってきました。 |
4月11日(火) 15:59:46
52365 |
いちごみるく |
https://wandbox.org/permlink/mXELWOFordwuqG78
c++ 10^7->一瞬 10^8->2788ms 10^9->30677ms 10^10->346171ms |
4月11日(火) 21:48:42
52366 |
まるケン |
#52365
chatpgt、同じことしようとしましたが、エラーで試せず。 もしかして、人気沸騰中でアクセスが半端ないから? |
4月12日(水) 9:33:48
MAIL:take4310@mobile.email.ne.jp 52367 |
まるケン |
#52367
さすが C++、早いですね! もう一つ高速化の提案。 1から順に調べるのではなく、1000から逆順に調べる!! で、比較対象は、その数を10で割った余りにすれば、数値⇒文字列の変換や文字列の長さを求める手間が減るかと思います。 Ruby レベルですが、数倍高速になりました。 |
4月12日(水) 9:34:07
MAIL:take4310@mobile.email.ne.jp 52368 |
手描き図面職人 |
chatpgtの使い方ですが、エラーが出たら、一度ログアウトして再度ログインすれば、画面の左側に前の質問の答えがあります。 |
4月12日(水) 9:58:24
52369 |
「数学」小旅行 |
#52368 なるほど!!! うまい!!! |
4月12日(水) 13:38:36
52370 |
「数学」小旅行 |
n=0;l=1000000000;k=3;sl="0";c=1
i=l while i>=1 j=i while j>=1 if sl!=j%10 then if c>=k then n+=1 end;sl=j%10;c=1 else c+=1 end j=j/10 end i-=1 end if c>=k then n+=1 end p n ってやって、なんと、610秒、約10分になりました。 #52363 で、56分もかかったのに。。。 しかし、c++には遠く及ばず。。。約20倍!! |
4月12日(水) 15:53:27
52371 |
手描き図面職人 |
chatpgtの続きですが、左側に質問に該当する物が無い時は、新しいチャットをクリックして下さい。 |
4月12日(水) 17:04:01
52372 |
いちごみるく |
逆順でやってもほとんど速度変わりませんでした。
to_stringが遅そうだなとは思ってましたが、 除算も早くはないのでトントンなんですかね https://wandbox.org/permlink/AZvQyHIy1QtMIoBF |
4月12日(水) 18:52:20
52373 |
手描き図面職人 |
chatgptが、図面問題に適用できるかどうか、チャレンジしてみたいと思います。 |
4月12日(水) 19:41:37
52374 |