gpt4 book ai didi

java - 通过减法排列数字

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:15:37 24 4
gpt4 key购买 nike

我有一个 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);


}

最佳答案

这是代码

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 则不可能构造任何这样的序列。

如果不是这种情况,则有 2 个指针,一个在范围的中间,一个在范围的末尾。并交替打印它们,同时递减两个指针,直到到达开头。

随时改进代码。

关于java - 通过减法排列数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41480722/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com