首页 > 解决方案 > 如何确定一个数字是否是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 但它不应该。知道如何纠正我的错误吗?

标签: javaarrays

解决方案


可以通过以下更简单的方式完成

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;
    }
}

推荐阅读