你有3个需要完成的任务,完成这3个任务是需要付出代价的。
首先,你可以不花任何代价的完成一个任务;然后,在完成了第i个任务之后,你可以花费|Ai - Aj|的代价完成第j个任务。|x|代表x的绝对值。
计算出完成所有任务的最小代价。
一行3个整数A1,A2,A3,每个数字之间用一个空格分隔。所有数字都是整数,并且在[1,100]范围内。
一个整数,代表最小的代价。
1 6 3
5
10 10 10
0
s = list(map(int, input().split())) print(max(s)-min(s))运行时间:27ms
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main(){
int n;
vector<int> vec;
for(int i=0;i<3;i++)
{
cin>>n;
vec.push_back(n);
}
sort(vec.begin(),vec.end());
int ans=0;
for(int i=0;i<vec.size()-1;i++)
{
ans+=abs(vec[i+1]-vec[i]);
}
cout<<ans;
return 0;
} import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.Arrays;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String line;
while((line = br.readLine()) != null) {
String[] strArr = line.split(" ");
int[] arr = new int[strArr.length];
for(int i = 0; i < strArr.length; i++) arr[i] = Integer.parseInt(strArr[i]);
Arrays.sort(arr);
int cost = 0;
// 排序后,相邻任务之间的代价差值最小,完成所有任务的总代价最小
for(int i = 1; i < arr.length; i++) cost += arr[i] - arr[i - 1];
System.out.println(cost);
}
}
} import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int[] arr =new int[3];
for (int i = 0; i < 3; i++) {
arr[i]=scanner.nextInt();
}
Arrays.sort(arr);
System.out.println(arr[2]-arr[0]);
}
}
#include<bits/stdc++.h>
using namespace std;
int main() {
int x = 0;
vector<int> f;
while (cin >> x) {
f.push_back(x);
}
sort(f.begin(), f.end());
int sum = 0;
int len = f.size()-1;
for (int i=len-1; i>=0; --i) {
sum += (f[i+1] - f[i]);
}
cout << sum <<endl;
return 0;
} 第一种:
1.按题目要求求附近两个数的绝对值
2.用两个较小的绝对值相加就得最小代价
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
int A1=sc.nextInt();
int A2=sc.nextInt();
int A3=sc.nextInt();
int B1,B2,B3;
B1=Math.abs(A1-A2);
B2=Math.abs(A2-A3);
B3=Math.abs(A1-A3);
int s;
if(B1>=B2&&B1>=B3){
s=B2+B3;
}else if(B2>=B1&&B2>=B3){
s=B1+B3;
}else
{
s=B2+B1;
}
System.out.println(s);
}
}第二种:
1.判断数是否为中间的数
2.用最大的减去最小的得到最小代价
importjava.util.*;
public class Main{
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
intA1=sc.nextInt();
intA2=sc.nextInt();
intA3=sc.nextInt();
ints;
if(A1>=A2&&A1=A3&&A1<=A2){
s=Math.abs(A3-A2);
}else if(A2>=A1&&A2=A3){
s=Math.abs(A3-A1);
}else
{
s=Math.abs(A1-A2);}
System.out.println(s);
}
}
a_list = list(map(int, input().split())) avg = sum(a_list) / len(a_list) minimum_difference = a_list[0] a_closest_to_avg = a_list[0] for i in range(len(a_list)): difference = abs(a_list[i] - avg) if difference < minimum_difference: minimum_difference = difference a_closest_to_avg = a_list[i] res = 0 for a in a_list: res += abs(a - a_closest_to_avg) print(res)
#include <bits/stdc++.h>
using namespace std;
int main(){
string s;
getline(cin,s);
istringstream ss(s);
int x, sum=0;
vector<int> v;
while(ss>>x){
v.push_back(x);
}
sort(v.begin(), v.end());
for(int i=1;i<v.size();i++)
sum += v[i]-v[i-1];
cout<<sum<<endl;
return 0;
} | import java.util.Scanner; import java.util.Arrays; public class Main{ publicintprintMin(int[] arr){ Arrays.sort(arr); int a=arr[2]-arr[1]; int b=arr[2]-arr[0]; int c=arr[1]-arr[0]; if(a>=b&&a>=c){ return b+c; }else if(b>=c&&b>=a){ return a+c; }else{ return a+b; } } public static void main(String[] args){ Scanner sc=newScanner(System.in); String s=sc.nextLine(); String[] ss=s.split(" "); int[] arr=newint[3]; for(int i=0;i<3;i++){ arr[i]=Integer.parseInt(ss[i]); } Main test=newMain(); System.out.println(test.printMin(arr)); } } |
| 1 2 3 4 5 6 7 8 9 10 | import java.util.* public class Main{ public static void main(String[] args){ Scanner in =new Scanner(System.in); String string1 = in.nextLine(); String number1[] = string1.split(" "); int number[] =new int[3]; for(inti=0;i<3;i++){number[i]=Integer.parseInt(number1[i]);} Arrays.sort(number); System.out.println(number[2]-number[0]);}} |
class MainActivity:
def main(self):
# Read the data
nums = list(map(int, filter(lambda x: len(x) > 0, input().split(' '))))
# Initialization
nums.sort()
result = 0
# Traverse
for ptr in range(1, len(nums)):
result += nums[ptr] - nums[ptr - 1]
print(result)
if __name__ == '__main__':
M = MainActivity()
M.main() #include <stdio.h>
#include <stdlib.h>
int main() {
int A[3];
int i, j, k, cost, min_cost = 1000000;
// 输入三个数
for (i = 0; i < 3; i++) {
scanf("%d", &A[i]);
}
// 枚举三个任务的完成情况,并计算总代价
for (i = 0; i < 3; i++) {
for (j = 0; j < 3; j++) {
if (i == j) continue; // 任务不能重复完成
for (k = 0; k < 3; k++) {
if (i == k || j == k) continue; // 任务不能重复完成
// 计算总代价
cost = abs(A[i] - A[j]) + abs(A[j] - A[k]);
if (cost < min_cost) {
min_cost = cost;
}
}
}
}
// 输出最小代价
printf("%d\n", min_cost);
return 0;
}
#include <iostream>
using namespace std;
int main()
{
int input[3], val = 0, k_max = 0, k_min = 0, max, min;
cin >> input[0] >> input[1] >> input[2];
max = min = input[0];
for (int i = 1; i < 3; i++)
{
if (input[i] > max)
{
max = input[i];
k_max = i;
}
if (input[i] < min)
{
min = input[i];
k_min = i;
}
}
cout << max - min;
return 0;
}