下図のようなあみだくじがあります。縦線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
あらかじめ、線の本数分番号を振った配列を用意し、入力が来るたびに対象の番号のデータを交換していきます。
#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さん。交換方法があることを指摘、ありがとうございます。