我想解决这个问题。在过去的四个小时里,我一直在尝试编码。
如果整数是无穷序列中的一个元素,则它被定义为智能数
1,2,4,7,11,16…
注意,2-1=1,4-2=2,7-4=3,11-7=4,16-11=5,所以对于k>1,序列的kth元素等于k-1元素+k-1。例如,对于k=6,16是kth元素,等于11 ( k-1th元素)+5( k-1)。名为isSmart的写函数,如果其参数是智能数字,则返回1,否则返回0。因此isSmart(11)返回1,isSmart(22)返回1,isSmart(8)返回0。
我尝试了以下代码
import java.util.Arrays;
public class IsSmart {
public static void main(String[] args) {
// TODO Auto-generated method stub
int x = isSmart(11);
System.out.println(x);
}
public static int isSmart(int n) {
int[] y = new int[n];
int j = 0;
for (int i = 1; i <= n; i++) {
y[j] = i;
j++;
}
System.out.println(Arrays.toString(y));
for (int i = 0; i <= y.length; i++) {
int diff = 0;
y[j] = y[i+1] - y[i] ;
y[i] = diff;
}
System.out.println(Arrays.toString(y));
for (int i = 0; i < y.length; i++) {
if(n == y[i])
return 1;
}
return 0;
}
}
当我用11测试它是给我0,但它不应该。知道如何纠正我的错误吗?
发布于 2019-12-17 14:14:11
请注意,不需要构建数组:
public static int isSmart(int n) {
int smart = 1;
for (int i = 1; smart < n; i++) {
smart = smart + i;
}
return smart == n ? 1 : 0;
}
发布于 2019-12-17 13:35:20
它可以以更简单的方式完成,如下所示
import java.util.Arrays;
public class IsSmart {
public static void main(String[] args) {
int x = isSmart(11);
System.out.println("Ans: "+x);
}
public static int isSmart(int n) {
//------------ CHECK THIS LOGIC ------------//
int[] y = new int[n];
int diff = 1;
for (int i = 1; i < n; i++) {
y[0] =1;
y[i] = diff + y[i-1];
diff++;
}
//------------ CHECK THIS LOGIC ------------//
System.out.println(Arrays.toString(y));
for (int i = 0; i < y.length; i++) {
if(n == y[i])
return 1;
}
return 0;
}
}
发布于 2019-12-17 13:43:31
问题之一是填充数组的方式。
数组可以按如下方式填充
for(int i = 0; i < n; i++) {
y[i] = (i == 0) ? 1 : y[i - 1] + i;
}
函数isSmart
的总体应用可以简化为:
public static int isSmart(int n) {
int[] array = new int[n];
for(int i = 0; i < n; i++) {
array[i] = (i == 0) ? 1 : array[i - 1] + i;
}
for (int i = 0; i < array.length; i++) {
if (array[i] == n) return 1;
}
return 0;
}
https://stackoverflow.com/questions/59374867
复制相似问题