H - 生日宴会
Time Limit:500MS Memory Limit:32768KB 64bit IO Format:%lld & %llu
Description
某只同学在生日宴上得到了一个N×N玻璃棋盘,每个单元格都有灯。每一秒钟棋盘会有一个单元格被点亮然后熄灭。棋盘中的单元格将以图中所示的顺序点亮。每个单元格上标记的是它在第几秒被点亮。
第一秒棋格(1,1)将被点亮,第五秒棋格(3,1)将被点亮。
现在这只同学想知道在给定的时间哪个棋格将被点亮(时间将以秒为单位给出)。题目假设N足够大。
Input
先输入一个整数T(<= 200) , 表示测试用例的组数。
每一组用例将包括一个整数S(1 ≤ S ≤ 1015),表示时间。
(注:此题中长整形的输入输出要用 %lld 格式实现)
Output
对于每组用例您必须打印用例编号和两个数字(x,y)表示列号和行号。
Sample Input
3
8
20
25
Sample Output
Case 1: 2 3
Case 2: 5 4
Case 3: 1 5
#include<stdio.h>
#include<math.h>
int main()
{
long long s,i,j,x,y,h;
int t,k=0;
scanf("%d",&t);
while(t--)
{
k++;
scanf("%lld",&s);
h=ceil(sqrt(s));//ceil向上取整,floor向下取整
i=h;
j=i*i-s;
if(i%2==0)
{
if(j<i)
{
x=i;
y=1+j;
}
else
{
x=2*i-j-1;
y=i;
}
}
else
{
if(j>=i)
{
x=i;
y=2*i-j-1;
}
else
{
x=1+j;
y=i;
}
}
printf("Case %d: %lld %lld\n",k,x,y);
}
return 0;
}