題目:在一個N*N(N為奇數)的方格里從中心開始蛇形填數字,問某個數字M的位置,左下角是(1,1)。
分析:簡單題。首先開方判斷層數,然後分別判斷在四條邊上的那一條,分別處理。
說明:╮(╯▽╰)╭。
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cmath>
using namespace std;
int main()
{
int SZ, P;
while (~scanf("%d%d",&SZ,&P) && SZ+P) {
int circle = (int)(sqrt(P-0.1)+1)/2;
int center = (SZ+1)/2;
int left = P - (2*circle-1)*(2*circle-1);
if (left <= circle*2) {
printf("Line = %d, column = %d.\n",center+circle,center+circle-left);
}else if (left <= 4*circle) {
left = left - 2*circle;
printf("Line = %d, column = %d.\n",center+circle-left,center-circle);
}else if (left <= 6*circle) {
left = left - 4*circle;
printf("Line = %d, column = %d.\n",center-circle,center-circle+left);
}else {
left = left - 6*circle;
printf("Line = %d, column = %d.\n",center-circle+left,center+circle);
}
}
return 0;
}