$$\huge\color{blue}{你知道你的ABC吗(超完整数学推导和解题思路)}$$
$\large\color{red}{声明}$
本题解为作者原创,不喜勿喷!若题解中有错误,可以在评论区指出。
题意
给定一个集合,包含以下$7$种元素:
a,b,c,a+b,b+c,c+a,a+b+c
。
并且满足:$1\le a \le b \le c\le 10^9$。
求$a,b,c$的值。
数学分析
$$由b\le c知,b\le c\le a+c$$
$$又a\le b,∴a\le b\le c\le a+c$$
$$由于a,b,c>0,所以a+b,b+c,c+a \le a+b+c$$
于是,得出结论,这个集合中最小的数为$a$,第二小的数为$b$,最大的数为$a+b+c$。
推荐算法
算法一:只需要排序一次即可算出答案。
$1.$ 输入这七个数字在数组$x$中。
$2.$ $\color{orange}{将这个数组x从小到大排序。}$
$3.$ 根据数学推导可以知道$x[1]=a,x[2]=b,x[7]=a+b+c$,推出$c=x[7]-x[2]-x[1]$。
$4.$ 输出得到的结果。
算法二:需要多次打擂台,代码较算法一长一些。
$1.$ 输入这七个数字在数组$x$中。
$2.$ $\color{orange}{利用打擂台的方式求出数组x的最小值、次小值、最大值。}$
$3.$ 利用数学推导计算$a,b,c$的值。
$4.$ 输出得到的结果
参考代码(算法一)
#include<bits/stdc++.h>//万能头文件
using namespace std;//使用标准命名空间
int a[10];//定义一个整形数组,长度为10
int main(){//主函数定义
for (int i=1;i<=7;++i)
scanf("%d",&a[i]);//输入数组
sort(a+1,a+7+1);//对数组中的7个元素排序(1~7)
printf("%d %d %d",a[1],a[2],a[7]-a[1]-a[2]);//一道简单的数学推导题,输出答案
return 0;
}