蓝桥杯求助帖,刷题的时候遇到了这个题目,下面是我写的代码,在自己测试的时候感觉没啥问题,但是放入洛谷测试只能得十分,希望各位大佬指正。
/System.out.println("输入数据,中间用空格隔开");//System.out.println("请输入数据的数量");//后比前大且为同号为正数//前比后大且都为同号负号。//后比前大且为同号为负数//前比后大且都为同号正号。//把每一个位置需要变换的次数组成一个数组。//如果为异号直接取前面数字需要的次数。
import java.util.Arrays;
import java.util.Scanner;
public class ReturnArrayTest {
public static void main(String[] args) {
//System.out.println("请输入数据的数量");
Scanner sc=new Scanner(System.in);
int num=sc.nextInt();
//System.out.println("输入数据,中间用空格隔开");
int[] numberArray=new int[num];
for (int i = 0; i < numberArray.length; i++) {
numberArray[i]=sc.nextInt();
}
//把每一个位置需要变换的次数组成一个数组
int[] needSteps=new int[num/2];
for (int j = 0,k=num-1; (k-j)>=1; j++,k--) {
needSteps[j]=numberArray[k]-numberArray[j];
}
//System.out.println(Arrays.toString(needSteps));
//寻找最优解
int sum=0;
for (int p = 0; p < needSteps.length-1; ) {
//后比前大且为同号为正数//前比后大且都为同号负号
if((needSteps[p+1]>=needSteps[p]&&needSteps[p]>=0&&needSteps[p+1]>=0)||(needSteps[p+1]<=needSteps[p]&&needSteps[p]<=0&&needSteps[p+1]<=0))
{
sum+=Math.abs(needSteps[p+1]);
p++;
p++;
if(p==needSteps.length-1)
{
sum+=needSteps[needSteps.length-1];
}
}
//后比前大且为同号为负数//前比后大且都为同号正号
else if ((needSteps[p+1]>=needSteps[p]&&needSteps[p]<=0&&needSteps[p+1]<=0)||(needSteps[p+1]<=needSteps[p]&&needSteps[p]>=0&&needSteps[p+1]>=0)) {
sum+=Math.abs(needSteps[p]);
p++;
p++;
if(p==needSteps.length-1)
{
sum+=needSteps[needSteps.length-1];
}
}
//如果为异号直接取前面数字需要的次数
else if ((needSteps[p]>0&&needSteps[p+1]<0)||(needSteps[p]<0&&needSteps[p+1]>0)) {
sum+=Math.abs(needSteps[p]);
p++;
}
}
System.out.println(sum);
}
}
更多推荐
所有评论(0)