列表

详情


QY9. 拼凑正方形

描述

牛牛有4根木棍,长度分别为a,b,c,d。羊羊家提供改变木棍长度的服务,如果牛牛支付一个硬币就可以让一根木棍的长度加一或者减一。牛牛需要用这四根木棍拼凑一个正方形出来,牛牛最少需要支付多少硬币才能让这四根木棍拼凑出正方形。

输入描述

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

输出描述

输出一个整数,表示牛牛最少需要支付的硬币

示例1

输入:

4 1 5 4

输出:

4

原站题解

C 解法, 执行用时: 2ms, 内存消耗: 308KB, 提交时间: 2021-09-15

#include <stdio.h>

int main(){
    int a[4] = {0},temp=0,sum=0;
    for(int i=0;i<4;i++){
        scanf("%d",&a[i]);
    }
    for(int i=0;i<4;i++){
        for(int j=i+1;j<4;j++){
            if(a[j]<a[i]){
                temp = a[j];
                a[j] = a[i];
                a[i] = temp;
            }
        }
    }
    a[0] = a[1]-a[0];
    a[2] = a[2]-a[1];
    a[3] = a[3]-a[1];
    a[1] = 0;
    for(int i=0;i<4;i++){
        sum += a[i];
    }
    printf("%d",sum);
    return 0;
}

C 解法, 执行用时: 2ms, 内存消耗: 352KB, 提交时间: 2019-01-13

#include <stdio.h>
int main(void)
{
	int a,b,t,c,d,sum;
	scanf("%d %d %d %d",&a,&b,&c,&d);
if (a>b) {t=a;a=b;b=t;}
if (a>c) {t=a;a=c;c=t;}
if (a>d) {t=a;a=d;d=t;}
if(b>c) {t=b;b=c;c=t;}
if(b>d) {t=b;b=d;d=t;}
if(c>d) {t=c;c=d;d=t;}
sum=d-a+c-b;
printf("%d",sum);
	 return 0;
 } 

C 解法, 执行用时: 2ms, 内存消耗: 364KB, 提交时间: 2019-08-25

#include <stdio.h>
#include <math.h>

int find_mid(int a, int b, int c, int d)
{
    int t1, t2;
    if (a < b){
        t1 = b;
    }
    else{
        t1 = a;
    }
    
    if (c < d){
        t2 = d;
    }
    else{
        t2 = c;
    }
    if (t1 > t2){
        return t2;
    }
    else{
        return t1;
    }
}

int main(){
    int a, b, c, d, mid;
    int coin_num = 0;
    if (scanf("%d %d %d %d", &a, &b, &c, &d) == 4){
        mid = find_mid(a, b, c, d);
        coin_num += abs(a - mid);
        coin_num += abs(b - mid);
        coin_num += abs(c - mid);
        coin_num += abs(d - mid);
        printf("%d", coin_num);
    }
    return 0;
}

C 解法, 执行用时: 2ms, 内存消耗: 364KB, 提交时间: 2019-05-15

#include<stdio.h>
#include<math.h> //本题实质对4个数排序,取中位数 牛客:拼凑正方形 
main()
{
	int a,b,c,d,temp;
	int mid_number,cost; 
	
	scanf("%d%d%d%d",&a,&b,&c,&d);
	
	if(a>b)
	{
		temp=a;
		a=b;
		b=temp;	
	}
	if(a>c)
	{
		temp=a;
		a=c;
		c=temp;
	}
	 if(b>c)
	{
		temp=b;
		b=c;
		c=temp;
	}
	if(a>d)
	{
		temp=a;
		a=d;
		d=temp;
	}
	if(b>c)
	{
		temp=b;
		b=c;
		c=temp;
	}
	if(b>d)
	{
		temp=b;
		b=d;
		d=temp;
	}
	if(c>d)
	{
		temp=c;
		c=d;
		d=temp;
	}
	mid_number=(b+c)/2;
	cost=abs(a-mid_number)+abs(b-mid_number)+abs(c-mid_number)+abs(d-mid_number);
	printf("%d",cost);
}

C 解法, 执行用时: 2ms, 内存消耗: 368KB, 提交时间: 2019-04-13

#include"stdio.h"
#include"math.h"
int main(){
    void sort(int *s);
    int arr[4];
    for(int i=0; i<4; i++)
        scanf("%d",&arr[i]);
    sort(arr);
    int m = (arr[1]+arr[2])/2;
    printf("%d",abs(arr[0]-m)+abs(arr[1]-m)+abs(arr[2]-m)+abs(arr[3]-m));
    
}

void sort(int*s){
    int i,j;
    for(i=0; i<4; i++)
        for(j=0; j<i;j++)
            if(s[j]>s[j+1]){
                s[j] = s[j]^s[j+1];
                s[j+1] = s[j]^s[j+1];
                s[j] = s[j]^s[j+1];
            }
}

上一题