阅兵方阵

x国要参加同盟阅兵活动。
主办方要求每个加盟国派出的士兵恰好能组成 2 个方阵。
x国发现弱小的 y国派出了130人的队伍,他们的士兵在行进中可以变换2种队形:
130 = 81 + 49 = 9^2 + 7^2
130 = 121 + 9 = 11^2 + 3^2

x国君很受刺激,觉得x国面积是y国的6倍,理应变出更多队形。
于是他发号施令:
我们要派出一支队伍,在行进中要变出 12 种队形!!!

手下人可惨了,要忙着计算至少多少人才能组成 12 种不同的双方阵。
请你利用计算机的优势来计算一下,至少需要多少士兵。

(ps: 不要失去信心,1105人就能组成4种队形了)

注意,需要提交的是一个整数,表示至少需要士兵数目,不要填写任何多余的内容。

答案:

#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <cmath>

using namespace std;
int num[2000000],m = 2000000;
int main() {
    for(int i = 1;i < 1000;i ++) {
        for(int j = i;j < 1000;j ++) {
            int d = i * i + j * j;
            num[d] ++;
            if(num[d] >= 12) m = min(m,d);
        }
    }
    printf("%d\n",m);
    for(int i = 1;i * i * 2 <= m;i ++) {
        int d = (int)sqrt(m - i * i);
        if(d * d == m - i * i) {
            printf("%d^2 + %d^2 = %d\n",i,d,i * i + d * d);
        }
    }
}

猜你喜欢

转载自www.cnblogs.com/8023spz/p/10778468.html