P8635 [藍橋杯 2016 省 AB] 四平方和 - 洛谷 (luogu.com.cn)
直接暴力枚舉,不做任何優化的話最后會TLE一個,稍微優化一下就過了(數據給的還是太良心了)
優化:每層循環用if判斷一下,如果大于n就直接跳
當然,還可以再優化,只需要3層for,最后一個數字用n去減前面的數字,開根,判斷是不是整數
#include<iostream>
using namespace std;
int main() {int n; cin >> n;for (int i = 0; i * i <= n; i++) {if (i * i * 4 > n)break;for (int j = i; j * j <= n; j++) {if (i * i + j * j * 3 > n)break;for (int p = j; p * p <= n; p++) {if (i * i + j * j + p * p * 2 > n)break;for (int q = p; q * q <= n; q++) {if (i * i + j * j + p * p + q * q == n) {cout << i << " " << j << " " << p << " " << q;return 0;}}}}}
}