プログラミングのお題スレ Part22 (857レス)
前次1-
抽出解除 必死チェッカー(本家) (べ) 自ID レス栞 あぼーん

リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
809: デフォルトの名無しさん [] 2025/08/19(火) 21:08:19.27 ID:zFi0pntB(1) 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])
問題A
perl

use v5.42;

sub nthPermutation($digits, $rank) {
  my @figures = (1..$digits);
  my @fact = (1);
  push @fact, $_ * $fact[-1] for @figures;
  return join "", map { splice(@figures, $_, 1) } sub($n, $r) {
    $n-- ? (int($r / $fact[$n]), __SUB__->($n, $r % $fact[$n])) : ();
   }->($digits, $rank - 1);
}

for my $i (1, 2, 3, 123456, 234567, 362880) {
  say "$i -> " . nthPermutation(9, $i);
}

1 -> 123456789
2 -> 123456798
3 -> 123456879
123456 -> 416589732
234567 -> 684753219
362880 -> 987654321
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.041s