通过减去

时间:2017-01-05 08:55:17

标签: java algorithm

我有一个java问题,我不知道如何解决该程序:

必须从用户n,k获得两个号码。

我需要找到从1到N的数字的排列,以便两个项之间的差异> = k例如:

我们得到数字(n = 5和k = 2)

,答案必须是1,4,2,5,3:

并且对于(n = 2和k = 2)没有答案,因为1和2之间的差异是1(1,2或2,1)。

我希望你明白我的意思。

我写了一些错误的代码:

public static void main(String[] args) {
    Scanner user_input = new Scanner(System.in);

    int n = user_input.nextInt();
    int k = user_input.nextInt();
    int a ;
if (n%2==0) a = (n-2)/2; else a = (n-1)/2 ;  

if (k!=a) {System.out.println("Impossible"); return;}

int h = k+1;
int value = 0;
int t = 1;
boolean b = true;
String res = "1 ";
    while (value<n-1) {            
        value++;
        if (b){
            t = t + h;
            res = res + t + " ";
            b = false;
        }else {
            t = t-k;
            res = res + t + " ";
            b = true;
        }
    }

    System.out.println(res);


}

2 个答案:

答案 0 :(得分:1)

这是代码

public class HelloWorld{

public static  void calculationMethod(int n, int k) {
        if(n<2 || n/2 < k) {
            System.out.println("Impossible");
            return;
        }
        else {
            int i = (int)Math.ceil(n/2.0);
            int j = n;
            int start = i;
            boolean flag = true;
            while(i>=1 || j>start) {
                if(flag) {
                   System.out.print(i + " " );
                   i--;
                   flag = false;
                }
                else {
                    System.out.print(j + " " );
                    j--;
                    flag = true;
                }
            }
        }
    }


     public static void main(String []args){
        calculationMethod(7,3);
     }
}

这个想法是将你的范围(n)分成两半。如果k> n / 2则则不可能构建任何这样的序列。

如果不是这种情况,那么在你的范围中间有一个指针,一个指针在范围的末尾。并打印它们或者递减两个指针,直到你到达开头。

随意改进代码。

答案 1 :(得分:0)

public void calculationMethod(int n, int k) {
    ArrayList<Integer> intList = new ArrayList<>();
    for (int i = 1; i <= n; i++) {
            int a = i;
            int b = i + 2;
            if (!intList.contains(a) && a<=n) {
                intList.add(a);
            }
            if (!intList.contains(b) && b<=n) {
                intList.add(b);
            }
    }
    String mValues= TextUtils.join(",",intList);
    Log.i("values", mValues);
}