首页 > 试题广场 >

拼凑正方形

[编程题]拼凑正方形
  • 热度指数:6969 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解
牛牛有4根木棍,长度分别为a,b,c,d。羊羊家提供改变木棍长度的服务,如果牛牛支付一个硬币就可以让一根木棍的长度加一或者减一。牛牛需要用这四根木棍拼凑一个正方形出来,牛牛最少需要支付多少硬币才能让这四根木棍拼凑出正方形。

输入描述:
输入包括一行,四个整数a,b,c,d(1 ≤ a,b,c,d ≤ 10^6), 以空格分割


输出描述:
输出一个整数,表示牛牛最少需要支付的硬币
示例1

输入

4 1 5 4

输出

4
暴力破解遍历🤣🤣🤣
public class Main {
    public static void main (String[] args) {
        Scanner sc = new Scanner(System.in);
        int[] array = new int[4];
        for (int i = 0; i < 4; i++) {
            array[i] = sc.nextInt();
        } 
        int MAX_VALUE = Integer.MAX_VALUE;
        Arrays.sort(array);
        int result;
        for (int i = array[0]; i <= array[3]; i++) {
            result = Math.abs(Math.abs(i - array[0]) + Math.abs(i - array[1]) + Math.abs(i - array[2]) + Math.abs(i - array[3]));
            if (MAX_VALUE > result) {
                MAX_VALUE = result;
            }
        }
        System.out.println(MAX_VALUE);
    }
}


发表于 2020-08-27 15:23:14 回复(0)
先给数组排序,然后第一个元素向第二个元素对其(第二个元素-第一个元素=第一步需要花费的钱),
第二步把最后一个元素向倒数第二个元素对其(倒数第一个元素(最大的数)-倒数第二个元素=第二部需要花费的钱);最后一步把第二个元素向第三个元素对其 (第三个元素-第二个元素=第三步花费的钱) 再把这个钱乘2(因为第一个元素和第二个元素相等,所以一到三需要花费的钱跟二到三一样)  ,再用到的钱加起来
import java.util.*;
public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner cin=new Scanner (System.in);
	    int a[]=new int[4];
	    for(int i=0;i<4;i++) {
	    	a[i]=cin.nextInt();
	    }
	    Arrays.sort(a);
	    int min=0;
	    min=min+(a[1]-a[0])+(a[3]-a[2])+2*(a[2]-a[1]);
	    System.out.print(min);

	}

}


发表于 2019-11-05 18:14:05 回复(0)
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int[] arr = new int[4];
        for (int i = 0; i < 4; i++) {
            arr[i] = sc.nextInt();
        }
        int min = Integer.MAX_VALUE;
        for (int i = 0; i < 4; i++) {
            int cur = Math.abs(arr[i] - arr[0]) + Math.abs(arr[i] - arr[1]) + Math.abs(arr[i] - arr[2]) + Math.abs(arr[i] - arr[3]);
            if (cur < min) {
                min = cur;
            }
        }
        System.out.println(min);
    }
}
发表于 2019-06-14 22:25:36 回复(0)

爱奇艺的校招编程题不在常理之外了8....

取个中间值即可:

private static int solution(int a, int b, int c, int d) {
    int[] arr = new int[]{a, b, c, d};
    Arrays.sort(arr);

    int mid = arr[2];

    int res = 0;
    for (int i = 0; i < 4; i++) {
        re***ath.abs(arr[i] - mid);
    }

    return res;
}
编辑于 2019-05-17 20:34:40 回复(0)
先进行排序,最少的钱=(最长-最短)+(第二长-第二短)
import java.util.Scanner;
import java.util.Arrays;
public class Main
{
    public static void main(String[]args)
    {
        int sum=0;
        int[]n=new int[4];
         Scanner input=new Scanner(System.in);
        for(int i=0;i<n.length;i++)
        {
            int a=input.nextInt();
            n[i]=a;
        }
        Arrays.sort(n);
        sum=(n[3]-n[0])+(n[2]-n[1]);
        System.out.println(sum);
    }
}
发表于 2019-05-06 20:09:08 回复(0)
//笨是笨了点
import java.util.*;
import java.lang.Math;
public class Main{
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        int a=sc.nextInt();//以空格分割
         int b=sc.nextInt();
         int c=sc.nextInt();
         int d=sc.nextInt();
        if(a==b&&a==c&&a==d){
            System.out.println("0");
        }else{
        int[] arr1=new int[4];
                  int t1=Math.abs(b-a)+Math.abs(c-a)+Math.abs(d-a);
                  int t2=Math.abs(b-a)+Math.abs(c-b)+Math.abs(d-b);
                  int t3=Math.abs(b-c)+Math.abs(c-a)+Math.abs(d-c);
                  int t4=Math.abs(b-d)+Math.abs(c-d)+Math.abs(d-a);
                   //int minCoin=Math.min(t1,t2,t3,t4);
           // for(int i=0;i<4;i++){
                arr1[0]=t1;  arr1[1]=t2;  arr1[2]=t3;  arr1[3]=t4;
           // }
            Arrays.sort(arr1);
            System.out.println(arr1[0]);
        }
    }
    
}
发表于 2019-04-12 22:32:26 回复(0)
import java.util.*;
public class Main{
    public static void main(String[] args){
        try(Scanner in = new Scanner(System.in)){
            int[] a = new int[4];
            for(int i = 0;i < 4;i++){
                a[i] = in.nextInt();
            }
            System.out.println(helper(a));
        }
    }
    public static int helper(int[] a){
        Arrays.sort(a);
        int mid,sum = 0;
        if(a.length % 2 != 0){
            mid = a[a.length / 2];
        }else{
            mid = (a[(a.length - 1) / 2] + a[a.length / 2] ) / 2;
        }
        for(int num:a){
            sum += Math.abs(mid - num);
        }
        return sum;
    }
}

发表于 2019-01-16 17:02:54 回复(0)