1,int isVesuvian(int n),如果n是有且仅是两组不同的两个数的平方和,返回1,否则0.
2,int isOneBalanced(int a[]),判读数组是否是平衡数组,开头连续为1的数 + 结尾连续为1的数 = 中间连续不为1的数 结果返回1,否则为0.
3,int closestFibonacci(int n),返回比n小的最大的斐波拉契元素。斐波拉契数列 1 1 2 3 5 8 13 21 34
PS:1 1 2 3 5 8 13 21 34....第三个数等于前两个数之和
第一题
public int isVesuvian(int n) {
// 从2开始枚举i
for (int i = 2; i <= Math.sqrt(n); i++) {
// 从i开始枚举j
for (int j = i; j <= Math.sqrt(n); j++) {
if (i * i + j * j == n) {
// 如果i和j相同或者i和j的平方和等于n,返回1
return 1;
}
}
}
// 如果没有找到i和j,返回0
return 0;
}
第二题
public int isOneBalanced(int[] a) {
// 如果数组长度小于3,返回0
if (a.length < 3) {
return 0;
}
// 初始化开头连续为1的数和结尾连续为1的数
int start = 0, end = 0;
// 初始化中间连续不为1的数
int middle = 0;
// 找到开头连续为1的数
while (a[start] == 1) {
start++;
}
// 找到结尾连续为1的数
while (a[a.length - 1 - end] == 1) {
end++;
}
// 找到中间连续不为1的数
middle = a.length - start - end;
// 如果开头连续为1的数 + 结尾连续为1的数 = 中间连续不为1的数,返回1
if (start + end == middle) {
return 1;
}
// 否则返回0
return 0;
}
第三题
public int closestFibonacci(int n) {
// 初始化斐波拉契数列的前两项
int f1 = 1, f2 = 1;
// 循环求出斐波拉契数列的后续项
while (f2 < n) {
int temp = f2;
f2 = f1 + f2;
f1 = temp;
}
// 返回比n小的最大的斐波拉契数
return f1;
}