プログラミングのお題スレ Part10

■ このスレッドは過去ログ倉庫に格納されています
2018/01/01(月) 11:15:04.40ID:2Vr1CPKy
プログラミングのお題スレです。

前スレ
プログラミングのお題スレ Part9
https://mevius.5ch.net/test/read.cgi/tech/1480579110/

【出題と回答例】
1 名前:デフォルトの名無しさん
  お題:お題本文

2 名前:デフォルトの名無しさん
  >>1 使用言語
  回答本文

【ソースコードが長くなったら】 (オンラインでコードを実行できる)
http://ideone.com/
http://codepad.org/
http://compileonline.com/
http://rextester.com/runcode
http://runnable.com/
http://code.hackerearth.com/
http://melpon.org/wandbox
https://paiza.io/

宿題は宿題スレがあるのでそちらへ。
481デフォルトの名無しさん
垢版 |
2018/04/01(日) 09:35:03.69ID:zXSLQCZZ
>>477
文系だからではなく、元々バカなだけだろううな。
今時は普通なら、知らん事は自分で調べる。
482デフォルトの名無しさん
垢版 |
2018/04/01(日) 09:49:03.09
そもそも「素因数分解した時の5の指数」が分からんし!
なんでそれが0の数と関係あるのかも分からんし!
文系を迫害すんなや
2018/04/01(日) 10:40:13.62ID:EVES2VPh
>>480
mediawiki を採用しているところですね
でも自分で mediawiki をビルドしようとすると、TeX 表記導入のところで嵌ります、うまくいかない
2018/04/01(日) 13:21:09.52ID:hPpSSUHU
これ分からなくなって八つ当たりしてんな、一旦ROMって落ち着けよ
10!=3628800=36288x10^2のように、後ろの0の数は10が何個掛けられているかで決まる
10=2x5だから2と5の掛けられている数のうち小さい方とも言えるな
で、一例として10!=1x2x3x4x5x6x7x8x9x10=2^8x3^4x5^2x7=2^6x3^4x7x(2^2x5^2)だから、0が2つ付くと言える
どう考えても2の素因数は5の素因数より多くなるので5の素因数の数だけ分かれば良い
この時、5の素因数の数はnが5の倍数になった時(n/5)+nが5^2の倍数になった時(n/(5^2))+…と計算すれば求まる 端数切り捨てな
485デフォルトの名無しさん
垢版 |
2018/04/01(日) 14:01:25.37
>>484
> どう考えても2の素因数は5の素因数より多くなる

そうとは限らないじゃん
2の素因数の数も数えなきゃ不正確じゃん
486KAC
垢版 |
2018/04/01(日) 14:29:21.34ID:R1ag/+cJ
>>485
それを主張するなら、2の方が多くなる事例をあげるか、証明するかしないと。
2018/04/01(日) 14:50:31.82ID:NSJxVWjO
多い分には問題がない
2018/04/01(日) 15:21:10.32ID://EuH1G7
>>485
任意の2以上の整数nとする. n!に対して素数kの素因数の数が F(n, k) になる事は機知とする.
F(n, k) = [n/k] + [n/(k^2)] + ...
またガウス記号の定義([x] は x を超えない最大の整数)から任意の実数 x に対して,
x - 1 < [x] <= x  ……☆.
m_k を n/(k^m_k) >= 1 となる最大の整数とすると,
n/(k^m_k) >= 1 ⇔ n < k^m_k ⇔ log_k(n) >= m_k なので, m_k = [log_k(n)].
また m_k より大きな任意の整数 i に対して n/(k^i) < 1 なので, [n/(k^i)] = 0.
従って, F(n, k) = [n/k] + [n/(k^2)] + ... + [n/(k^m_k)].
さて, ☆より
F(n, 5) <= n/5 + n/(5^2) + ... + n/(5^m_5)
= n*(1/5)*(1 - 1/(5^m_5))/(1 - 1/5)
= n*(1 - 1/(5^m_5))/(5 - 1)
= n*(1 - 1/(5^[log_5(n)]))/(5 - 1)
<= n*(1 - 1/(5^log_5(n)))/(5 - 1)
= (n - 1)/4,
F(n, 2) > n/2 - 1 + n/(2^2) - 1 + ... + n/(2^m_2)
= n*(1/2)*(1 - 1/(2^m_2))/(1 - 1/2) + (-1)*m_2
= n*(1 - 1/(2^m_2)) - m_2
> n*(1 - 1/(2^(log_2(n) - 1))) - log_2(n)
= n - log_2(n) - 2.
依って2以上の任意の整数nに対して,
F(n, 5) <= (n - 1)/4 < n - log_2(n) - 2 < F(n, 2)
となり題意は示された.
((n - 1)/4 < n - log_2(n) - 2 は増減表を書くなりして確かめて)
2018/04/01(日) 15:34:29.77ID:NSJxVWjO
a,bをとりあえず非負実数
[a]をaを超えない最大の整数として
a>=b→[a]>=[b]
[a+b]>=[a]+[b]
はすぐにわかる。
n!を割る2べき数の最大指数は1からnまでに偶数が[n/2]個
あることより[n/2]以上であることもすぐわかる

5^m<=n<5^(m+1)として
[n/5]+[n/5^2]+...+[n/5^m]
<=[n/5+n/5^2+...+n/5^m]
<=[n/5+n/5^2+...]=[n/4]<=[n/2]<=n!を割る2べき数の最大指数
2018/04/01(日) 15:46:35.74ID:EVES2VPh
>>486
「素因数 2 の数は 素因数 5 の数よりも多い」
を使うのなら証明は使う側がしないといけないだろう?一定の範囲では 2の倍数の方が 5 の倍数よりも多いとはわかるが、素因数の数について正確なことをいえるかな?
2018/04/01(日) 15:47:58.83ID:NSJxVWjO
[n/5]+2[n/5^2]+3[n/5^3]+...+m[n/5^m]
を評価しなければいけなかった(。。)

mを非負整数とするときm[a]<=[am]
だから
[n/5]+2[n/5^2]+3[n/5^3]+...+m[n/5^m]<=
[n/5]+[2n/5^2]+[3n/5^3]+...+[mn/5^m]<=
[n/5+2n/5^2+...+mn/5^m+...]<=
[n (1/5)(1+2(1/5)+3(1/5)^2+....)]
=[n(1/5)/(1-1/5)^2]
=[5n/16]<=[n/2]
あとは同じ 👀
Rock54: Caution(BBR-MD5:0be15ced7fbdb9fdb4d0ce1929c1b82f)
492デフォルトの名無しさん
垢版 |
2018/04/01(日) 16:14:16.83
なんか長々と書かせちゃってごめん
正の整数の全範囲が対象じゃなくてあくまで「n!」だってこと忘れてたわ
2018/04/01(日) 18:24:24.96ID:NSJxVWjO
勘違い
2018/04/01(日) 18:24:43.79ID:NSJxVWjO
>>491は無視して
2018/04/01(日) 22:04:20.90ID:niLyVdLs
>>462
>未知の課題に対するコーディング能力
とか言ってるが、高校数学ではよくある問題だぞ?

ttp://examist.jp/mathematics/integer/kaijyou-soinsu/
ttp://www.geocities.jp/math12345go/math-qa/kaijou.htm
ttps://www.school-turnup.com/p-12594/
ttps://www.shinko-keirin.co.jp/keirinkan/tea/kou/jissen/sugaku/201603/index.html

高卒なんて言い訳になんねーよ
496デフォルトの名無しさん
垢版 |
2018/04/01(日) 22:25:21.45
>>495
数I・Aで100点だったが、数II・Bで0点取って、数III・Cは選択しなかった俺に謝れ
2018/04/02(月) 01:59:38.46ID:J8SaQrAA
お題そのものが数学のお題だったということだな。
2018/04/02(月) 07:50:16.86ID:OKtU2ZmG
プログラミング的には、n!を割る最大の5のべき乗の指数が最大の2のべき乗の指数
を超えないということを使わずに(=知らずに)
それでも十分な速度(実質>>469程度の処理しかしない)なものが書けるかということが課題

高校レベルの課題に見えて実は決してそうじゃないな
499KAC
垢版 |
2018/04/02(月) 08:54:14.80ID:rV3y1QX6
>>498
設計したこと無いの?
2018/04/02(月) 09:32:15.39ID:OKtU2ZmG
select max(m) from select m where 10^m|n!
と同レベルの可読性だが
やることは割り算しながら足し算となるコードなんて
そもそもあるのかよw
2018/04/02(月) 12:18:57.87ID:ZxHHSjBr
>>498
>知らずに十分な速度
その程度なら2の個数も数えるだけだから簡単だし高速だと思う
が、普通はちょっと考えて5だけで良いなと5だけ数えるコードを書くんじゃないかな
何も知らず何も考えず計算機任せの力技ってのだけがプログラミングじゃないでしょ。
502デフォルトの名無しさん
垢版 |
2018/04/02(月) 12:28:13.55ID:IY8Jb2od
高校レベルの数学をすっかり忘れたおぢさんにやさしく教えておくれ。
2018/04/02(月) 12:41:49.07ID:3lJ3dDiL
素因数の数が
m := [log(n)/log(k)]として
 m
 Σ[n/k^i]
i=1
明らかにmも[]の中もkに対して(広義)単調減少なんだから
素数が大きくなるほどn!のその素因数の数が減ることも明確というお話
504デフォルトの名無しさん
垢版 |
2018/04/03(火) 00:32:23.81
>>503
ご覧ください、これがアスペです
2018/04/03(火) 04:19:52.09ID:j/8PevsK
>>498
中学生が手計算で出来るレベルだ
数学苦手でしょ?
2018/04/03(火) 04:29:34.46ID:j/8PevsK
>>502
1〜132の整数の中に5の倍数は何個ある?
1〜132の整数の中に25の倍数は何個ある?
1〜132の整数の中に125の倍数は何個ある?
1〜132の整数の中に625の倍数は何個ある?
...

132の階乗を素数の積で表したとき
5は何回出てくるる?

132の階乗の右に並ぶ0の数は?
2018/04/03(火) 06:13:09.59ID:AFO/JCVj
何時までやってんだよw
508デフォルトの名無しさん
垢版 |
2018/04/03(火) 09:25:43.98ID:Lqpq4yV4
>>506
132という値を出した理由は?
5,25,125,625を出した理由は?
2018/04/03(火) 09:27:23.08ID:wT7rO+2N
こんだけ話題が伸びてる問題なのに出題後高々10分でほぼ理想的なコードが掛かれてるってのが面白いな
2018/04/03(火) 09:39:27.81ID:wc7Iq10c
個々の住人数学が滅茶苦茶できてコードが3割みたいな人いるからな。
2018/04/03(火) 10:49:30.76ID:c+6kwVVv
>>508
> 132という値を出した理由は?
1問目の数値からから

> 5,25,125,625を出した理由は?
考えてみよう
2018/04/03(火) 13:37:36.52ID:dgEzwcuL
俺は理想的なコードは割って足すループの方だ
可読性だなんだの風潮はあるが、ああいう一工夫がこういうプログラミングの煌めき

と思う
2018/04/03(火) 15:34:52.13ID:AFO/JCVj
何が煌きだよw
定石(じょうしき)だろw
2018/04/03(火) 22:23:56.22ID:fs0DGcro
>>510
というか至極単純なコードならついついゴルフしたくなってしまうというか
515デフォルトの名無しさん
垢版 |
2018/04/03(火) 22:46:02.45ID:dYq4OQgG
お題
与えられたデータを間引きして小さいな順に並べる
間引くデータの個数の最小値を求める
2018/04/03(火) 22:58:26.43ID:fs0DGcro
日本語でおk
2018/04/03(火) 23:00:28.05ID:j/8PevsK
任意の有限長の実数列に対し
単調増加列の中で最大長となる部分列を求めよ

って感じ?
2018/04/03(火) 23:07:35.66ID:9JPZuSkd
要素数の最大はどれくらい?
2018/04/03(火) 23:31:42.00ID:YxTEfpvL
>>509
すぐに「n!の末尾の0の個数」などをググって
WEBに書かれている方式をコーディングするか、
自分の頭で方式から考えはじめるかの違いだろうな
2018/04/03(火) 23:39:30.66ID:YxTEfpvL
まさかな…
2018/04/04(水) 00:25:41.22ID:C+gm7esp
>>513
そのわりには>>469に至るまで出てきてないわけだが
コロンブスの卵にケチ付けた奴みたいだな
522デフォルトの名無しさん
垢版 |
2018/04/04(水) 00:27:47.47ID:HZl+eAA0
>>515
1,1,1の場合、0個で良いのか?
2018/04/04(水) 00:42:07.59ID:3+w4vvmw
>>519
ググるような問題か?
普通に義務教育を出てれば一瞬でわかると思うのだが
2018/04/04(水) 00:46:27.40ID:3+w4vvmw
>>522
「小さいな順」ってどっちだろうね?
単調増加か単調非減少か
私は単調増加だと思ったから答えは2個
普通のソートだと単調非減少だから単調増加?

どっちにしろアルゴリズムは大して変わらん
2018/04/04(水) 00:51:30.79ID:KRNVtbK3
>>523
義務教育でlogはやら無いぞ
何分でコーディング完了して動作確認までいったのよ
2018/04/04(水) 00:52:29.89ID:3+w4vvmw
logなんて使わん
2018/04/04(水) 00:53:18.67ID:3+w4vvmw
素因数分解を習えば十分
2018/04/04(水) 00:53:53.74ID:KRNVtbK3
>>526
何番のお台の話をしてるんだよ
ずれてるぞボケが
2018/04/04(水) 00:56:57.83ID:3+w4vvmw
ずれたとしたら俺のせいではない
>>519>>525が悪い
2018/04/04(水) 00:58:01.53ID:KRNVtbK3
いや、お前が悪い。きっぱり
2018/04/04(水) 00:59:08.89ID:KRNVtbK3
んで、お前はその簡単な問題を
何分で問題解決しコーディング完了して動作確認までいったのよ
2018/04/04(水) 01:00:53.49ID:3+w4vvmw
>>519>>459の問題であることは明らか
2018/04/04(水) 01:02:49.08ID:KRNVtbK3
log使ってんじゃん

普通に義務教育を出てれば一瞬でわかると思って
お前はその簡単な問題を
何分で問題解決しコーディング完了して動作確認までいったのよ
上の方のレスでどれがお前の回答よ
2018/04/04(水) 01:04:22.37ID:3+w4vvmw
>>531
簡単すぎて書く気にもならんレベル
logなんか使わん
2018/04/04(水) 01:05:01.45ID:3+w4vvmw
>>506にlogなんか出て来ないだろ?
2018/04/04(水) 01:07:37.29ID:KRNVtbK3
>>534
じゃあlogを使わない計算量の多い方法でもいいよ。

義務教育を出てれば一瞬でわかる問題を
お前が一から考えて自力で解いてコーディングして動作を確かめ
書き込んだレスは上の何番だよ
2018/04/04(水) 01:09:27.61ID:KRNVtbK3
人のレスをを見たら簡単だと印象を持ったんだろ
自力ですぐには解けなかったんだろ
2018/04/04(水) 01:09:59.83ID:3+w4vvmw
そもそもlogを使ったコードなんて出てきたか?
2018/04/04(水) 01:10:40.77ID:KRNVtbK3
ぼけがw
2018/04/04(水) 01:16:56.56ID:3+w4vvmw
考え方は>>506
以上
2018/04/04(水) 01:20:52.57ID:/4oBH7Xm
もう構うなよ
2018/04/04(水) 01:39:06.43ID:rhFOVHGj
>>524
順に並べるということから同値の連続は許して広義の単調増加でよいのでは

工夫のない力技のを描いてみた
https://www.onlinegdb.com/ByuL67-iG
2018/04/04(水) 01:41:20.57ID:rhFOVHGj

一応2行ほど費やしてほんのちょびっとだけ枝刈りしてある
2018/04/04(水) 02:12:06.95ID:OPiy2CfY
なら自分も広義単調増加で
LISだし二分探索のO(NlogN)で実装
https://ideone.com/kN5UFU
2018/04/04(水) 02:22:12.11ID:OPiy2CfY
>>544
やっべLISで作ったから答えがLISのままだわ
n-出力に脳内変換しておいて
546デフォルトの名無しさん
垢版 |
2018/04/04(水) 03:07:06.84ID:Ssb/YhXn
>>515
Kotlin
後ろから手前に見て行くように作ってみたが、これで良いのか?
https://paiza.io/projects/_o2ryjyVw3lQI2iKrDRf_A?language=kotlin
2018/04/04(水) 03:27:44.46ID:OPiy2CfY
>>546
広義単調増加だよな?
そのプログラムだと
1, 3, 6, 8, 9, 10, 6, 5, 6, 7
が5で出力される(解は1,3,6,6,6,7より4)
2018/04/04(水) 06:36:29.21ID:5k6f4LQE
>>515
間引きする関数というか方法は?サンプルもないのにどうしろと。
2018/04/04(水) 07:58:24.29ID:C+gm7esp
ほらサンプル

元のデータ 1, 3, 6, 8, 9, 10, 6, 5, 6, 7
これの 1, 3, 6, (8, 9, 10,) 6, (5,) 6, 7
括弧内の4つを間引けば昇順1,3,6,6,6,7になる
最小の間引く個数は4
2018/04/04(水) 08:06:05.02ID:5k6f4LQE
>>549
1, 3, 6, 8, 9, 10, (6, 5, 6, 7)
これでいけない理由は?
2018/04/04(水) 08:07:01.43ID:C+gm7esp
>>550
そっちでもいい
答えは同じだから
2018/04/04(水) 08:07:50.32ID:5k6f4LQE
>>551
残るものが変わってくるんだから、たまたま同じだったではすまんだろう。
2018/04/04(水) 08:12:16.57ID:C+gm7esp
たまたまじゃなくてどちらでも同じだから良いって言ってるんだよ
最小の個数が算出されれば良いんだよ

>>542を例にして説明するとv1とv2の長さが等しいとき、
選び方によって間引方は変わるがどちらを選んでも
同じ答え(個数)になるからどちらでもいい
2018/04/04(水) 08:13:20.00ID:C+gm7esp
「選び方」というのは等しいときv1を使うかv2を使うかってことね
2018/04/04(水) 08:13:32.31ID:5k6f4LQE
主観がないな。
2018/04/04(水) 08:14:06.01ID:C+gm7esp
ただの荒らしだったか
2018/04/04(水) 08:16:15.34ID:5k6f4LQE
まぁいいわ。説明が悪いとだけ言っとくわ。
2018/04/04(水) 08:17:58.31ID:5k6f4LQE
http://arison.jp/wordpress/wp-content/project_comedy_l.gif
2018/04/04(水) 08:27:21.83ID:5k6f4LQE
じゃー、ソートすれば常に0だな。
おしまーい。
2018/04/04(水) 08:39:36.72ID:5k6f4LQE
これ、プログラムのお題じゃなくてイジワル問題ってやつだ。
一応間引くとは言ったけど、どのように間引きたいかは書いてない。
それを考えろっていうもんだいで、じょうけんとしては何もだされていない。
べつに大きくしてもよい。
が、大きくする必要性もないので、条件内でやる最善手がソートして昇順にするだけででも満たされうる。

以上。
2018/04/04(水) 09:01:32.20ID:5k6f4LQE
https://ideone.com/G4cjeS
C++。これが間違ってるんだったらその理論を聞きたい。
2018/04/04(水) 09:09:05.05ID:5k6f4LQE
思想でも読んでるのかなぁ。
2018/04/04(水) 10:01:46.30ID:OPiy2CfY
なんだその、「牛乳を1個買ってきて。卵があったら6個買ってきて」と言われて卵があったから牛乳を6個買ってくるような行動
リアルでこんな奴いるんだな……
間違ってるわけではないのが余計質悪い
2018/04/04(水) 10:05:40.95ID:5k6f4LQE
>>563
ん?だから説明が悪いっていのを体現しただけ。
>>558 で書いてるでしょ。
多分思想問題なんだよこれ。
2018/04/04(水) 10:10:25.80ID:5k6f4LQE
例えばね、例えば。
この数字が暗号で間引くと人が死ぬとかいうシチュエーションでそもそも間引く必要あるの?っていう趣旨返しなわけ。
2018/04/04(水) 10:25:05.16ID:rXkfBXRy
与えられたデータが数列とも限らないし勝手に解釈して好きなように作る以外にやりようがない問題
自由度が大きい問題はあらゆる答えが正解ともいえるから一つの正解にたどり着く過程を楽しむ数学好きとかには不評だろう
2018/04/04(水) 12:49:19.51ID:C+gm7esp
おいおいおいおい
勝手に解釈して好きなように作るしかない問題(←否定的な表現)だからあらゆる答えが正解だ、というの?

これは「どう解釈しても構わないから好きなように答えれば良い問題」っていうんだよ。

例えばソートのアルゴリズムだって別に数値かどうかなど決めずとも考察も品評もできる
「比較回数だけでいうならo(1)のバケツソートが最高。はい論破」とか言うのも自由
答えが一個ならただの問い、クイズだよ
2018/04/04(水) 16:23:18.45ID:AaKOqhzy
[[[[[[][}[[[ [ {} [] ]]][ [[ [
569デフォルトの名無しさん
垢版 |
2018/04/04(水) 16:49:39.45ID:uRR+3wvr
暗号か?
2018/04/04(水) 19:04:15.98ID:3+w4vvmw
C言語
なんか>>544とほとんど同じになってしまった
https://ideone.com/xraUUB
2018/04/04(水) 19:50:20.24ID:kMfCNnre
>>556
荒らしっていうかさ
その子はこのスレにながく張り付いてる
無職でかつガイジ
かわいそうな子だから放置しといてあげて
2018/04/05(木) 00:22:00.99ID:gfFWgbCr
A(間引く)の処理の後にB(小さい順に並べる)の処理をすると読んでしまったのは内緒
2018/04/05(木) 22:33:01.28ID:R1vPtX9i
お題
以下の配列pで与えられるツリー構造を図示せよ
・pの要素数はN
・p[i]はノードiの親ノードを表す
・p[i]=-1の場合、ノードiは根ノードである
・pに含まれる-1の数はちょうど1つ

[input]
1 2 -1 0 0 1 1 2

[outupt]
2
|-- 1
| |-- 0
| | |-- 3
| | `-- 4
| |-- 5
| `-- 6
`-- 7
2018/04/06(金) 06:25:51.13ID:EFVHWowI
p[0]=1
p[1]=0
2018/04/06(金) 06:27:10.11ID:EFVHWowI
p[2]=-1
2018/04/06(金) 06:40:00.16ID:EFVHWowI
連結ではない <===> ループが存在する
2018/04/06(金) 08:57:39.15ID:GWNJOzqa
>>573
https://ideone.com/u2CqvF
2018/04/06(金) 11:36:10.59ID:Rm6bGaxB
お題にツリー構造って明記されてるから閉路は無いのでは
2018/04/06(金) 12:54:56.14ID:gBxcjV03
条件には書いてない
根が1個という条件だけ中途半端に書いてある
はて
2018/04/06(金) 13:12:46.44ID:6ssoNVnM
「〜で与えられるツリー構造」
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況