跳到主要内容

千葉大学 融合理工学府 数学情報科学専攻 数学・情報数理学コース 2021年8月実施 専門 A5

标签:

Author

祭音Myyura (co-authored with GPT 6 Astra)

Description

次の Pascal プログラムについて答えよ。

program mondai(input, output);
var p: array[1..100] of integer; n,i: integer;
procedure q(i: integer);
var k,w,j: integer;
begin
if i=0 then begin
for j:=1 to n do write(p[j]:3);
writeln
end else
for k:=i downto 1 do begin
w:=p[i]; p[i]:=p[k]; p[k]:=w;
q(i-1);
w:=p[i]; p[i]:=p[k]; p[k]:=w
end
end;
begin
readln(n);
for i:=1 to n do p[i]:=i;
q(n)
end.
  1. 33 を入力したときの出力を記せ。
  2. 一般の 1n1001\le n\le100 に対する出力を理由とともに述べよ。

题目描述

对所列交换、递归、恢复数组的 Pascal 程序:(1) 写出输入 33 时的输出;(2) 说明输入一般的 1n1001\le n\le100 时会输出什么,并证明。

Kai

(1)

  1  2  3
2 1 3
1 3 2
3 1 2
3 2 1
2 3 1

(2) 1,,n1,\ldots,n の全 n!n! 個の順列を重複なく一行ずつ出力する。帰納的に q(i) は後ろの nin-i 項を固定し、先頭 ii 項の全順列を出力して、呼出し前の配列に戻す。実際、k の各値で末尾 p[i] に置く要素を選び、q(i-1) で残りの全順列を出力し、二度目の交換で状態を復元する。末尾要素が異なる場合の出力は互いに重ならない。