プログラミングのお題スレ Part22 (848レス)
上下前次1-新
抽出解除 レス栞
リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
802(3): デフォルトの名無しさん [] 2025/08/16(土) 20:29:06.33 ID:kN4EEg8M(2/3) AAS
>>799799(20): デフォルトの名無しさん [sage] 2025/08/16(土) 01:44:59.97 ID:VU+jlz0U(1/2) AAS
【問題A】
1~9を1つずつ使用して表される9桁の数Anは全部で9!(=362880)個存在する。
整数n(1≦n≦362880)が与えられたとき、n番目に小さいAnを求めよ。
(例)
1 → 123456789
2 → 123456798
3 → 123456879
123456 → 416589732
234567 → 684753219
362880 → 987654321
【問題B】
1~4を3つずつ使用して表される12桁の数Bnは全部で12!/(3!)^4(=369600)個存在する。
整数n(1≦n≦369600)が与えられたとき、n番目に小さいBnを求めよ。
(例)
1 → 111222333444
2 → 111222334344
3 → 111222334434
123456 → 222331434114
234567 → 324424331112
369600 → 444333222111
※求める数値は文字列または各桁の数の配列による表現も可能とする(123⇔"123"⇔[1,2,3])
の問題B
R
外部リンク:ideone.com
C++
外部リンク:ideone.com
803(1): デフォルトの名無しさん [] 2025/08/16(土) 21:32:58.04 ID:kN4EEg8M(3/3) AAS
>>799
>>802 のC++のithDuplicatedPermutation関数は引数が別の値(例えばn = 5, m = 3)のとき
正しく計算できなかったので修正。Rの方はintではなくdoubleで計算しているので問題ない。
外部リンク:ideone.com
808(1): デフォルトの名無しさん [] 2025/08/17(日) 20:40:30.84 ID:bUKuWE64(1) AAS
>>804確かにそうだった。15!も14!もintの範囲内に収まらない。>>803でn = 5に変えた場合に正しい
出力になるのはたまたまだった。
>>802をBigInt化するだけで問題なかった。
R
外部リンク:ideone.com
C++
外部リンク:ideone.com
828: デフォルトの名無しさん [] 2025/08/29(金) 22:34:59.67 ID:uVFRnDIW(1/2) AAS
>>802をCMD (Windowsバッチファイル) に移植
@echo off & setlocal EnableDelayedExpansion
echo 【問題A】
for %%i in (1, 2, 3, 123456, 234567, 362880) do call :ithDuplicatedPermutation 9 1 %%i
echo.
echo 【問題B】
for %%i in (1, 2, 3, 123456, 234567, 369600) do call :ithDuplicatedPermutation 4 3 %%i
exit /b
:ithDuplicatedPermutation
set /a n = %1, m = %2, i = %3, L = 0, P = 1
for /l %%j in (1, 1, %n%) do (
set /a c%%j = %m%
for /l %%k in (1, 1, %m%) do set /a L += 1, P = P * L / %%k
)
set a=%i% →
for /l %%j in (1, 1, %L%) do (
set /a done = 0
for /l %%k in (1, 1, %n%) do (
if !done! equ 0 (
set /a "q = P * c%%k / (L - %%j + 1)"
if !i! leq !q! (
set a=!a!%%k
set /a c%%k -= 1, P = q, done = 1
) else (
set /a i -= q
)
)
)
)
echo %a%
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.042s