[Atelier Blue アトリエブルー]Homeコンテストパソコン甲子園2003年本選>16問目

16問目(スタック)

問題

注:めんどくさいのでかなり略されています。原文参照

スタックを作りなさい。1~10の値が入力されたら保持し、0が入力されたら、1つ出力しなさい。なお、データがないのに出力を要求されることはなく、1~10の数は二度入力されることはない。

入力データはカレントフォルダの016.datにあるものとする。

入力


1~10
0~10
0~10
...
0~10

出力


1~10
1~10
...
...
1~10

入力例


1
5
6
0
1
0
10
0
0
0

出力例


6
1
10
5
1

解き方例

元々の問題ではすったくということを言っていなかったのですが、めんどくさいのでそういう問題と言ってしまうことにしました。解き方としては、再帰を使った方法もありますがスタンダードに行かせて貰います。

ソースコード

お持ち帰り

C/C++

#include <stdio.h>

int main(){
    int tr[10],i,in;
    FILE *fp;

    fp=fopen("016.dat","r");

    i = 0;

    while(!feof(fp)){

        //\nがポイント
        fscanf(fp,"%d\n",&in);
        if(in ==0){
            i--;
            printf("%d\n",tr[i]);
        }else{
            tr[i++]=in;
        }
    }

    return 0;
}

その他

スタックはかなり基本的なデータ構造なので覚えておきましょう。


ページの一番上へ
前のページへ 一覧に戻る 次のページへ
初版2006-5-14
[Atelier Blue アトリエブルー]Homeコンテストパソコン甲子園2003年本選>16問目