首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何确定一个数字在java中是否是一个智能数字?

如何确定一个数字在java中是否是一个智能数字?
EN

Stack Overflow用户
提问于 2019-12-17 13:04:49
回答 5查看 720关注 0票数 1

我想解决这个问题。在过去的四个小时里,我一直在尝试编码。

如果整数是无穷序列中的一个元素,则它被定义为智能数

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。

我尝试了以下代码

代码语言:javascript
运行
复制
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,但它不应该。知道如何纠正我的错误吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2019-12-17 14:14:11

请注意,不需要构建数组:

代码语言:javascript
运行
复制
public static int isSmart(int n) {
    int smart = 1;
    for (int i = 1; smart < n; i++) {
        smart = smart + i;
    }
    return smart == n ? 1 : 0;
}
票数 1
EN

Stack Overflow用户

发布于 2019-12-17 13:35:20

它可以以更简单的方式完成,如下所示

代码语言:javascript
运行
复制
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;
    }
}
票数 2
EN

Stack Overflow用户

发布于 2019-12-17 13:43:31

问题之一是填充数组的方式。

数组可以按如下方式填充

代码语言:javascript
运行
复制
for(int i = 0; i < n; i++) {
  y[i] = (i == 0) ? 1 : y[i - 1] + i;
}

函数isSmart的总体应用可以简化为:

代码语言:javascript
运行
复制
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;
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59374867

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档