アプリ版:「スタンプのみでお礼する」機能のリリースについて

こんにちは。
表題の問題、教えていただきたいです。

問題のテキストをコピーできないので、リンクを書きます。
http://www.jitec.jp/1_04hanni_sukiru/mondai_kait …

私の理解としては、A、B、Cの順序で入力するとしたら、Cを取り出すために、
1回でできる。Bを取り出すために、C,Bを出力するから、2回。
Aを取り出すために、C,B,Aを出力するから、3回。
ですから、全部で1+2+3=6回と思いますが、
なぜ答えが5回でしょうか。
そもそもこの問題の題意を理解を理解できていないのかな。

お分かりになる方がいらっしゃいましたら、ぜひご教授ください。

よろしくお願いいたします。

A 回答 (3件)

ANo.1が正解。

(それが言いたかっただけです,すみません。「自信あり」じゃなく「参考意見」になってたもので)
以下,蛇足です。(I)がpushで (O)がpop,左から右へとスタック操作を示しているので,

(I)(I)(I)(O)(O)(O)…出力順序はCBA
(I)(I)(O)(I)(O)(O)…出力順序はBCA
(I)(I)(O)(O)(I)(O)…出力順序はBAC
(I)(O)(I)(O)(I)(O)…出力順序はABC
(I)(O)(I)(I)(O)(O)…出力順序はACB

ということで,残ったCABは1つのスタックだけでは出力できません。
    • good
    • 0

さらに蛇足を。


この条件下だと「CAB」はなぜ出力不可能なのか?についてです。

スタック問題を解くためには、「入力したデータは底にたまる」「1回の出力で取り出せるデータは、一番上にたまっているデータのみ」ということを知っていることが前提となります。

ゆえに、「Aを、Bよりも先に出力させる」ためには「Aが出力候補になっている、という条件のもとで、Bが入ってくる前にAを出力させる」以外の方法はありません。

ANo.2番さんが指摘しておられる「ABC、ACB」の2つが、これに該当します。
-----
という前提はおいておいて、「CABはなぜ出せないの?」という話の本編です。

この問題の設定では、「A,B,Cの順番で入力する」とあります。「BよりもAを先に出力する」ためには、少なくとも「Bが入力される前に」Aの出力処理をしなけれならないのは、前述の通りです。とりあえず、「CAB」になりそうなデータ処理を追いかけてみます。

「CAB」を実現しようと思ったら、まずは、「Cを最初に出力」する必要があります。なので、とりあえず「A、Bのデータをスタックに入力し、Cの入力を待つ」方法をとらないと、Cを最初に出力することはできません。

で、Cを取り出したあとのAとBのデータは、スタック内ではこのようになっています。

|からっぽ|
|データB|
|データA|
------

「CAB」を完成させるには、次にAを出力するしかありません。しかし、上の図、および「取り出しのルール」上、次に取り出せるデータはBのみです。なので、どうしても次に「Aを出力すること」は不可能なのです。

ゆえに、「CAB」はこの問題においては不可能、と結論づけられます。
    • good
    • 0
この回答へのお礼

なるほど、よく理解できました。
皆さんのご回答、ありがとうございました。
今後とも、よろしくお願いします。

お礼日時:2008/03/04 23:41

ABCの並び方なら3*2*1=6通りですが



挿入3回、取り出し3回の組み合わせですから
また最初は(I)、最後は(O)と決まり
さらに(I)していないのに(O)はできませんから
(I)(I)(I)(O)(O)(O)
(I)(I)(O)(I)(O)(O)
(I)(I)(O)(O)(I)(O)
(I)(O)(I)(O)(I)(O)
(I)(O)(I)(I)(O)(O)
の5通りでよいのではないかと思います
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!