お元気さまです。わくワークの義(ヨシ)です。
プログラミングスキルアップを目指して、paizaラーニングで練習問題を解いています。
練習問題は、次のリンクから確認できます。
結構時間がかかってしまいましたが、100点取れました!
提出したコードは次のとおりです。
#include <stdio.h>
int main(void){
char str[1000];
int x,y,n,i,s,xy,xc,yc,sc;
fgets(str, sizeof(str), stdin);
sscanf(str,"%d %d %d",&x,&y,&n);
xy = 1;
xc = 0;
yc = 0;
s = 1;
sc = 1;
for(i=0;i<n;i++){
if(xy) {
x = x + 1 * s;
xc++;
}
else {
y = y + 1 * s;
yc++;
}
if(xc==yc){
s = s * -1;
xy = 1;
sc++;
xc = 0;
yc = 0;
}
if(sc==xc){
xy = 0;
}
}
printf("%d %d\n",x,y);
return 0;
}
規則的な移動の法則はつかめたものの、それを数式にするのが、なかなか難しかったです。
規則的な移動は、
x+1,y+1
x-1,x-1,y-1,y-1
x+1,x+1,x+1,y+1,y+1,y+1
x-1,x-1,x-1,x-1,y-1,y-1,y-1,y-1
というようにx座標が先でy座標が追いついてくる感じで移動します。
移動方向がそれぞれの座標で反転するので、x座標とy座標の切り替え、プラスとマイナスの切り替えのタイミングを作るために、それぞれの座標を動かしたときのカウントと、切り替えた回数のカウントをすることで解決しました。
それでは、今日もワクワクな一日を!
チャオチャオ!