トップページに戻る    次のSQLパズルへ    前のSQLパズルへ

11-8 白雪姫のリンゴ

SQLパズル

リンゴをx個抱えた白雪姫が、7人のこびとに1人ずつ順番に出会いました。
まず、1人目のこびとには、持っていたリンゴ数に1を加えた数の半分をあげました。
次に2人目のこびとには、残っていたリンゴ数に1を加えた数の半分をあげました。
3人目から、7人目まで、同じように残っていたリンゴ数に1を加えた数の半分をあげました。
そして、7人のこびとにリンゴをあげたあと、
白雪姫の手には、1つのリンゴ(毒リンゴ)しか、残っていませんでした。
xの値を求めてください。

白雪姫のリンゴ


SQL

declare
    Apple number;
begin
    for i in 1..1000 Loop
        Apple := i;
        Apple := Apple - (Apple+1)/2;
        Apple := Apple - (Apple+1)/2;
        Apple := Apple - (Apple+1)/2;
        Apple := Apple - (Apple+1)/2;
        Apple := Apple - (Apple+1)/2;
        Apple := Apple - (Apple+1)/2;
        Apple := Apple - (Apple+1)/2;
        if Apple = 1 then
            DBMS_Output.Put_Line(to_char(i) || '個');
        end if;
    end Loop;
end;
/


解説

for文を使って順番にチェックしてます。