本站遷移

因為我最近租用了網路空間以及網域,
故本站已遷移至新網站~
這邊的資訊已經正在進行搬移的工作~
希望各位可以到新網站去逛XD

New Website:
http://knightzone.org/

搜尋此網誌

2011年2月3日 星期四

[UVa]155:All Squares

利用遞迴找出每一個正方形,然後確定點是否有在此正方形內。
有的話,就加一;
沒有的話,就不用加任何數字。
這樣即可得解。

[C](0.028)
#include<stdio.h>
#define SIDE_X_AND_Y 2048
int squares( int k, int cenx, int ceny, int surx, int sury )
{
if( k <= 0 )
return 0;
int left = cenx - k;
int right = cenx + k;
int top = ceny - k;
int bottom = ceny + k;
if( left < 0 || right < 0 || top < 0 || bottom < 0 )
return 0;
int result = 0;
if( surx >= left && surx <= right && sury <= bottom && sury >= top )
result++;
result += squares( k/2, left, top, surx, sury );
result += squares( k/2, right, top, surx, sury );
result += squares( k/2, left, bottom, surx, sury );
result += squares( k/2, right, bottom, surx, sury );
return result;
}
int main()
{
int k, surx, sury;
while( scanf( "%d%d%d", &k, &surx, &sury ) != EOF )
{
if( k == 0 && surx == 0 && sury == 0 )
break;
int cenx = 1024, ceny = 1024;
printf( "%3d\n", squares( k, cenx, ceny, surx, sury ) );
}
return 0;
}
view raw UVa155.c hosted with ❤ by GitHub

0 意見:

張貼留言