逛知乎看到西安交大的本科入学考试数学试卷的试题里有一道,f(x)=|x+1|+|x+2|+|x+3|+…+|x+19|,求最小值。
我的方法是在-1到-19之间找,写了x=-1,x=-2,x=-3情况后找出规律归纳了一个公式,
在[-1,-19]区间,f(x)=[(19+x)+1] (19+x)/2+[(-x-1)+1] (-x-1)/2,然后求导什么的,高中知识啦,取得在x=10时,f(x)最小。
然后,自己又写了一个程序……再次判断正确否(因为题太简单了,大佬说能妙解……,我不能,刚好生病了,想着自己写个很短的代码验证,就当放松了),结果也是一样的。
#include <stdio.h>
#include<math.h>
int main()
{
int x=-1,sum=0,min=19*18/2,i,j;
for(i=-2;i>=-19;i--,sum=0)
{
for(j=1;j<=19;j++)
sum+=abs(i+j);
if(sum<min)
{
min=sum;
x=i;
}
}
printf("%d",x);
return 0;
}
写完时候想了想,大佬们难道想到的是对称?x为-20和0是f(x)值相等,-19和-1时f(x)值相等,难道这个函数图像真的是对称的……所以就取中间值?
欢迎大佬留言。
ps.是对称的,以后遇到,将首尾的绝对值框号里的参数相加,再除2,取得的数在带进原式子就可以得到最大值。
本文探讨了求解数学函数f(x)=|x+1|+|x+2|+...+|x+19|的最小值问题,通过观察和编程验证,发现函数在x=10时达到最小值,同时揭示了该函数的对称特性。

被折叠的 条评论
为什么被折叠?



