奇怪的生日礼物(数论基础)
4750 - 第十四课: 奇怪的生日礼物
今天是旭旭的生日,所以今天他收到了很多礼物。
在这些礼物中,有一个 N∗NN∗N 玻璃棋盘,每个棋盘内都装有灯。 打开电路板电源时,一个不同的单元会每秒点亮一次,然后变暗。
灯将按照图中所示的顺序点亮。
![15936546752739.png](https://517coding.com/uploads/20200702/15936546752739.png)
在第一秒,(1,1)的灯将点亮。在第5秒,单元格(3,1)的灯将点亮。现在,旭旭正在尝试预测哪个坐标会在第 SS 秒被点亮。假设 NN 足够大。
输入
输入以整数 T(1≤T≤200)T(1≤T≤200)开始,表示测试用例的数量。
每个测试用例将包含一个整数 S(1≤S≤1015)S(1≤S≤1015),表示第 SS 秒。
输出
共有 TT 行。对于每组测试数据,输出一行信息 "Case t: x y" (不含引号)。
其中 tt 表示对应的是第几组测试数据,x,yx,y表示第 SS 秒被点亮灯的坐标 。
样例
输入
3 8 20 25
输出
Case 1: 2 3 Case 2: 5 4 Case 3: 1 5
将完全平方数作为参考
/************************************************************************* > File Name: 4750.cpp > Author: Henry Chen > Mail: 390989083@qq.com > Created Time: 六 9/ 5 22:51:41 2020 ************************************************************************/ #include<bits/stdc++.h> using namespace std; int main() { int n; cin >> n; for(int i = 1;i <= n;i++) { long long s; scanf("%lld",&s); long long sq = sqrt(s); if(sq*sq == s) sq--; long long dif = s - sq*sq; //printf("%lld %lld\n",sq,dif); if(sq % 2 == 1) { if(dif > sq) { printf("Case %d: %lld %lld\n",i,sq+1,2*sq-dif+2); } else { printf("Case %d: %lld %lld\n",i,dif,sq+1); } } else { if(dif > sq) { printf("Case %d: %lld %lld\n",i,2*sq-dif+2,sq+1); } else { printf("Case %d: %lld %lld\n",i,sq+1,dif); } } } return 0; }