java - 如何确定一个数字是否是java中的智能数字?
问题描述
我有这个问题我想解决。在过去的 4 个小时里,我一直在尝试编码。
如果整数是无限序列 1, 2, 4, 7, 11, 16 ...中的元素,则整数被定义为智能数
...<br> 注意 2-1=1, 4-2=2, 7-4 =3, 11-7=4, 16-11=5 所以对于 k>1,序列的第 k 个元素等于第 k-1 个元素 + k-1。例如,对于 k=6,16 是第 k 个元素,等于 11(第 k-1 个元素)+ 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 但它不应该。知道如何纠正我的错误吗?
解决方案
可以通过以下更简单的方式完成
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;
}
}
推荐阅读
- swift - 当用户位置改变时调用 mapView(_:viewFor:)
- c++ - 在编译时将整数和分数部分宏组合成一个新宏或双精度
- windows - 如何获取目录中具有特定扩展名的所有文件?
- excel - 对多列中的数据进行排序
- sql-server - 带有百分位问题的 SQL 自定义排序顺序
- haskell - 如何将 Haskell 中的 fold 函数与其他数据类型一起使用
- javascript - 如何将默认的美国男性声音更改为英国女性或其他
- android - 地理编码器 getAddressLine(0) 有效,但 getLocality() 无效?
- java - 如何在 JPA Hibernate 中设置默认的 ConstraintMode
- registry - 如何返回注册表项大括号部分的值