本文已参与[新人创作礼]活动,一起开启掘金创作之路.
题目描述
标题:阅兵方阵
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种队形了)
注意,需要提交的是一个整数,表示至少需要士兵数目,不要填写任何多余的内容。
java代码
一个填空题,不考虑时间问题,暴力求解 不过算的有点慢。。 大体思路是让ans从1开始递增,如果发现某个ans有12种平方和,则输出ans。
public class Main {
static long ans = 0;
static int cnt = 0;
static final int num=12;
public static void main(String[] args) {
while (true) {
// 组成两个方阵
for (int i = 1; i <= Math.sqrt(ans); i++) {
for (int j = i + 1; j <= Math.sqrt(ans); j++) {
if (i * i + j * j == ans) {
cnt++;
if (cnt == num) {
System.out.println(ans);
return;
}
}
}
}
cnt = 0;
ans++;
}
}
}