题目: Fibsieve`s Fantabulous Birthday
Fibsieve had a fantabulous (yes, it’s an actual word) birthday party this year. He had so many gifts that he was actually thinking of not having a party next year.
Among these gifts there was an N x N glass chessboard that had a light in each of its cells. When the board was turned on a distinct cell would light up every second, and then go dark.
The cells would light up in the sequence shown in the diagram. Each cell is marked with the second in which it would light up.
解题思路:
- 偶数的平方和都在x = 1处, 奇数的平方和都在y = 1处, 根据等差数列可以算出, 连续平方和中间差值, 1, 3, 5, 7, 9,
#include <stdio.h>
#include <iostream>
#include <math.h>
using namespace std;
void FibsievesFantabulousBirthday()
{
int T = 0;
cin >> T;
long long S = 0;
for (int i = 0; i < T; i++) {
cin >> S;
long long rowNum = 1, x = 1, y = 1;
y = (long long)sqrt(S);
S -= (y * y);//代码应用公式:根据等差数列求和变形计算出来
if (S == 0) S += 1 + 2 * (y - 1);//作特殊处理
else y++;
if (y % 2 == 0 && S <= y) {
x = S;
} else if (y % 2 && S <= y) {
x = y;
y = S;
} else if (y % 2 == 0 && S > y) {
x = y;
y = y - (S - y);
} else if (y % 2 && S > y) {
x = y - (S - y);
} else {
}
cout << "Case " << i + 1 << ": " << x << ' ' << y << endl;
}
}
int main()
{
FibsievesFantabulousBirthday();
return 0;
}