暴力演算法之1080 兩個數的平方和+1926 圈地運動
阿新 • • 發佈:2021-06-21
給出一個整數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> usingView Codenamespace 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; }View Code