This question is unlikely to help any future visitors; it is only relevant to a small geographic area, a specific moment in time, or an extraordinarily narrow situation that is not generally applicable to the worldwide audience of the internet. For help making this question more broadly applicable, visit the help center。
7年前关闭。
该程序的目标是使数组中的所有数字相同。您必须递增阵列中所有值,但每次除外。然后,程序将打印出使所有数字相同所需的最小步骤数。我有一个我认为是可行的解决方案,我只是想使其更加有效,有人有什么想法吗?在下面的代码中,用户将数字的初始值输入数组,然后计算所需的步数
7年前关闭。
该程序的目标是使数组中的所有数字相同。您必须递增阵列中所有值,但每次除外。然后,程序将打印出使所有数字相同所需的最小步骤数。我有一个我认为是可行的解决方案,我只是想使其更加有效,有人有什么想法吗?在下面的代码中,用户将数字的初始值输入数组,然后计算所需的步数
public static void main(String[] args) throws NumberFormatException, IOException
{
counter=0;
size=sc.nextInt();
input= new int[size];
for(int k=0; k<size; k++)
{
input[k]=sc.nextInt();
}
while(!isAllEqual(input))
{
Arrays.sort(input);
for(int k=0; k<input.length-1; k++)
{
input[k]++;
}
counter++;
}
pw.println(counter);
public static boolean isAllEqual(int[] a){
for(int i=1; i<a.length; i++){
if(a[0] != a[i]){
return false;
}
}
return true;
}
最佳答案
如果您将步骤更改为更简单的方法,可能会更容易解决问题。如果我们只是在谈论值之间的相等性(即相对值,而不是绝对值),则一次增加和减少所有值没有什么区别。如果我们将步骤更改为“除一个值之外的所有值,然后将每个值减一”,我们可以看到,除一个值之外的所有值都等于减少一个值。
如果步数是“递减一个值”,您能算出使值相等的步数吗?它应该包括最大两次遍历数组两次,并且不进行排序。