お元気さまです。わくワークの義(ヨシ)です。
C言語のスキルアップのために、練習問題を進めています。
練習問題は、次のリンクから見ることができます。
今回の問題は、縦だけ、横だけの判定プログラムより複雑で、難しく感じました。
判定の方法は他にもあるかもしれませんが、上下左右の4方向のマスの情報を判定してヒットしたら1ポイント加算し、4ポイントになったら条件一致とするやり方にしました。
右端、左端、上端、下端の場合、それぞれ1方向が欠如するので、問題にある特別ルールで加算しています。
提出したコードは次のとおりです。
#include <stdio.h>
int main(void){
char str[1000];
char buf[20][21];
int h,w,i,x,y,r;
fgets(str, sizeof(str), stdin);
sscanf(str,"%d %d",&h,&w);
for(i=0;i<h;i++){
fgets(str,sizeof(str),stdin);
sscanf(str,"%s",buf[i]);
}
for(y=0;y<h;y++){
for(x=0;x<w;x++){
r = 0;
if( x==0 && buf[y][x+1]=='#') {
r = r + 1;
}
else if( x==w-1 && buf[y][x-1]=='#'){
r = r + 1;
}
if( y==0 && buf[1][x]=='#'){
r = r + 1;
}
else if( y==h-1 && buf[y-1][x]=='#'){
r = r + 1;
}
if( y!=0 && buf[y-1][x]=='#' ){
r = r + 1;
}
if( y!=h-1 && buf[y+1][x]=='#' ){
r = r + 1;
}
if( x!=0 && buf[y][x-1]=='#'){
r = r + 1;
}
if( x!=w-1 && buf[y][x+1]=='#'){
r = r + 1;
}
if( r == 4){
printf("%d %d\n",y,x);
}
}
}
return 0;
}
それでは、今日もワクワクな一日を!
チャオチャオ!