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

14問目(あみだくじ)

問題

下図のようなあみだくじがあります。縦線5本、横線4本です。横線は縦線をまたいでも良い物とします。

あみだくじ図

上の図の横線情報を

1,2

のようにカンマ区切りで表す。この情報を元にして、1,2,3,4...がどのような順番になるのかを出力するプログラムを作成する。なお、入力データはカレントフォルダの014.datに入っているものとする。

入力


縦線の本数 w (整数 : w≦30)
横線の本数 n (整数 : n≦30)
横棒リスト a1,b1 (整数 : 半角カンマ区切り)
横棒リスト a2,b2 (整数 : 半角カンマ区切り)
...
...
横棒リスト an,bn (整数 : 半角カンマ区切り)

出力

左から
1番目の棒に来る数字
2番目の棒に来る数字
...
...
n番目の棒に来る数字

入力例


5
4
1,2
3,5
2,4
1,4

出力例


1
4
5
2
3

解き方例

あらかじめ、線の本数分番号を振った配列を用意し、入力が来るたびに対象の番号のデータを交換していきます。

ソースコード

お持ち帰り

C/C++

#include <stdio.h>

int main(){
    int w,n,i;
    int lineData[31];
    int a,b;

    FILE *fp =fopen("014.dat","r");

    //番号を振っておく
    for(i=0;i<31;i++){
        lineData[i] =i;
    }

    fscanf(fp,"%d\n%d\n",&w,&n);

    //入力の数分交換を行う
    for(i=0;i<n;i++){
        int temp;
        fscanf(fp,"%d,%d\n",&a,&b);
        temp =lineData[a];
        lineData[a] = lineData[b];
        lineData[b] =temp;
    }

    for(i=1;i<=w;i++){
        printf("%d\n",lineData[i]);
    }

    fclose(fp);
    return 0;
}

その他

この問題はただの処理問題なので、パパっと作ってしまいましょう。来たデータにしたがって処理を個なうだけです。


Yura Suguruさん。交換方法があることを指摘、ありがとうございます。


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