トップ 一覧 Farm 検索 ヘルプ RSS ログイン

2006ra1.cの変更点

  • 追加された行はこのように表示されます。
  • 削除された行はこのように表示されます。
 #include <stdio.h>
 #include <stdlib.h>
 #include <math.h>
 // 文字型2次元配列を使った方法
 // 下方向を北と考えている(コンピュータとy軸は下方向がプラスだから)
 main()
 {
 	int n,m,i,j,x,y,ryo,takara;
 	char map[21][21], muki;
 	char tmp[100], *p;
 	
 	while(1){
 		// 文字と数字が混在した入力はうまく行かないことが多いので
 		// 全部1行ごとに文字列として読み込んでから変換をしている
 		fgets(tmp, 100, stdin);
 		n=atoi(tmp);
 		if(n==0) break;
 		
 		// 文字型2次元配列で地図(何もない=空白)
 		for(j=0; j<=20; j++){
 			for(i=0; i<=20; i++){
 				map[i][j]=' ';
 			}
 		}
 		
 		// 宝石を置いている
 		for(i=0; i<n; i++){
 			fgets(tmp, 100, stdin);
 			sscanf(tmp, "%d %d", &x, &y);
 			map[x][y]='*';
 		}
 		
 		fgets(tmp, 100, stdin);
 		m=atoi(tmp);
 		
 		takara=n;
 		x=10; y=10;
 		for(i=0; i<m; i++){
 			fgets(tmp, 100, stdin);
 			muki=tmp[0]; // 方向の1文字文を読み込む
 			p=tmp; p++;  // 方向の1文字を飛ばして移動量を読み込むため
 			ryo=atoi(p);
 			for(j=0; j<ryo; j++){
 				switch(muki){    // 方向に応じて移動する
 					case 'N': y++; break;
 					case 'E': x++; break;
 					case 'W': x--; break;
 					case 'S': y--; break;
 				}
 				if(map[x][y]=='*'){ // 移動して宝石があったら
 					takara--;       // カウントを1減らし
 					map[x][y]=' ';  // 地図から宝石を消す
 				}
 			}
 		}
 		if(takara==0){   // 全部の宝石を探し終わっていたら
 			puts("Yes");
 		}else{
 			puts("No");
 		}
 	}
 	
 	return(0);
 }