トップページに戻る
次のSQLパズルへ
前のSQLパズルへ
11-10 まま子立て
SQLパズル
子供を30人持った母親がいたが、子のうち15人は実子、15人はまま子だった。
ある日、母親はこの子らを円形に並べ、十番目、十番目にあたる者を順に除いていって、
一番最後に残った者にこの家を継がせると申し渡した。
いざ数えてみると、まま子ばかりが除かれていき、このままだと最後の一人も除かれることになった。
そこでその子は、「これではあまりにも不公平です。こんどは私から数え始めて下さい」と言った。
言い分がもっともなので、母親がその通りにすると、
今度は実子ばかり除かれて、結局まま子が最後に残ったという。
SQL
declare
type defineArray is table of pls_Integer index by binary_integer;
AnsArray defineArray;
soeji pls_Integer:= 1;
counter pls_Integer;
mamakocount pls_Integer:= 0;
begin
for i in 1..30 Loop
AnsArray(i) := 0;
end Loop;
while mamakocount < 15 Loop
counter:= 0;
Loop
if AnsArray(soeji) = 0 then
counter:= counter+1;
end if;
exit when counter=10;
soeji:= case soeji+1 when 31 then 1 else soeji+1 end;
end Loop;
AnsArray(soeji) := 1;
Loop
soeji:= case soeji+1 when 31 then 1 else soeji+1 end;
if AnsArray(soeji) = 0 then
exit;
end if;
end Loop;
mamakocount := mamakocount+1;
end Loop;
for i in 1..30 Loop
DBMS_Output.Put_Line(to_char(i) || '番目は' ||
case AnsArray(i) when '0' then '○' else '×' end);
end Loop;
end;
/
解説
case式で添字が、31を超えた場合に対処してます。