暴力算法之1080 两个数的平方和+1926 圈地运动
给出一个整数N,将N表示为2个整数i与j的平方之和(i <= j),如果有多种表示,按照i的递增序输出。
例如:N = 130,130 = 3^2 + 11^2 = 7^2 + 9^2(注:3^2 + 11^2同11^2 + 3^2算1种)
输入
一个数N(1 <= N <= 10^9)
输出
共K行:每行2个数,i j,表示N = i^2 + j^2(0 <= i <= j)。 如果无法分解为2个数的平方和,则输出No Solution
输入样例
130
输出样例
3 11 7 9
#include <iostream> #include <cmath> using namespace std; int n; int main() { cin >> n; if (n == 0) { cout << "No Solution" << endl; return 0; } bool flag = true; for (int i = 0; i * i <= n / 2; ++i) { double j = sqrt(n - i * i); if (j == (int)j) { cout << i << ' ' << j << endl; flag = false; } } if (flag) { cout << "No Solution" << endl; } return 0; }
平面上有n个金矿点。现在可以选择一块边长为L的正方形的土地,四边要求和坐标轴平行。请计算一下最多有多少金矿落在(在边界上也算)所选择的土地中。
已知1 <= n <= 100,1 <= L<= 100000,每个金矿的坐标(x,y)满足-100000<=x,y<= 100000。
输入
第一行输入两个整数n和L。 接下来n行,每行两个整数x和y,表示一个金矿的坐标。
输出
输出一个整数表示答案。
输入样例
3 1
1 2
2 1
4 3
输出样例
2
#include <iostream> #include <vector> #include <algorithm> using namespace std; struct node { int x, y; }; node a[110]; int n, L; vector<int> X, Y; int main() { cin >> n >> L; for (int i = 1; i <= n; ++i) { cin >> a[i].x >> a[i].y; } for (int i = 1; i <= n; ++i) { X.push_back(a[i].x); X.push_back(a[i].x - L); Y.push_back(a[i].y); Y.push_back(a[i].y - L); } int ans = 0; for (int i = 0; i < X.size(); ++i) { for (int j = 0; j < Y.size(); ++j) { int cnt = 0; int lx = X[i], ly = Y[j]; for (int k = 1; k <= n; ++k) { if (a[k].x>=lx && a[k].x<=lx+L && a[k].y>=ly && a[k].y<=ly+L) { cnt++; } } ans = max(ans, cnt); } } cout << ans << endl; return 0; }