プログラミングのお題スレ Part22 (848レス)
前次1-
抽出解除 レス栞

リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
802
(3): デフォルトの名無しさん [] 2025/08/16(土) 20:29:06.33 ID:kN4EEg8M(2/3) AAS
>>799
799(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
804(1): デフォルトの名無しさん [sage] 2025/08/16(土) 21:46:08.81 ID:VU+jlz0U(2/2) AAS
32bitだと階乗は12!が限界
確かにそうだった。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