今天继续刷牛客真题,给定四个边长,求拼凑成正方形的最短更改次数。
分析:
要想需要最短次数,那么就是按照中位数来进行比较,对输入的数组进行排序,然后计算每个值与该数的差的和。
问题:
1、C++中排序函数和Python中排序函数的差别。
附上C++代码:
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int a[4];
cin>>a[0]>>a[1]>>a[2]>>a[3];
sort(a,a+4);
int sum=0;
for(int i=0;i<4;i++)
{
sum+=abs(a[i]-a[2]);
}
cout<<sum<<endl;
return 0;
}
附上Python代码:
n=list(map(int,input().split()))
n=sorted(n)
sum=0
for i in range(4):
sum+=abs(n[i]-n[2])
print(sum)
ps:后面看别人的代码发现,针对这个场景,可以有更简单的方法。根据数学推到发现,最长和最短的两根木棍要达到相同长度,那么需要进行max-min次,第二长与第二短要达到相同长度,需要进行a-b。发现这两个结果是一样的。
附上代码:
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int a[4];
cin>>a[0]>>a[1]>>a[2]>>a[3];
sort(a,a+4);
int sum=(a[3]-a[0]+a[2]-a[1]);
cout<<sum<<endl;
return 0;
}
时间没有减小,但是空间占用少了。(排序的改进可能减小时间。)