跳到主要内容

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

Author

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

Description

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

function f(n: integer; a, b, c: boolean): boolean;
var ta, tb, tc: boolean;
var r: integer;
begin
ta := false; tb := false; tc := false;
r := n mod 4; n := n div 4;
if c and (r = 1) then tc := true;
if b then begin
case r of
1: tc := true;
2: begin tb := true; tc := true; end
end
end;
if a then begin
case r of
1: tc := true;
2: begin tc := true; tb := true; end;
3: begin ta := true; tb := true; tc := true; end
end
end;
if (n > 0) then f := f(n, ta, tb, tc)
else if (r = 0) then f := true else f := tc;
end;

(1) f(22, false, true, true)f(22, false, false, true) の値を求めよ。(2) x0x\ge0 に対し f(x, true, true, true)true となる xx を特徴付けよ。

题目描述

阅读上述 Pascal 程序。(1) 求指定的两个调用的返回值。(2) 对非负整数 xx,刻画调用 f(x, true, true, true) 返回真的全部 xx

Kai

(1) 22=(112)422=(112)_4 なので、桁を 2,1,12,1,1 の順に処理する。初期状態が (false,true,true) なら状態は

(false,true,true) -> (false,true,true) -> (false,false,true) -> (false,false,true)

となり true。初期状態が (false,false,true) なら最初の桁 22 で三成分とも false となり、その後も変わらず、返り値は false

(2) 答えは x=0x=0、または四進表示が 1i2j3k1^i2^j3^ki,j,k0i,j,k\ge0, i+j+k>0i+j+k>0)となる整数である。

実際、下位から上位へ処理すると、桁 33 の後には状態 (true,true,true)、桁 22 の後には (false,true,true)、桁 11 の後には (false,false,true) となる。ただし、次に読める桁はそれぞれ 1,2,31,2,31,21,211 に限られ、それ以外では全成分が false になる。桁 00 も全成分を false にする。したがって正整数では、零の桁がなく、上位から下位へ桁が広義増加することが必要十分である。x=0x=0 は最後の分岐で true となる。