思路分析:在面对这道题的时候,我们很容易想到采用数学的方法直接求解。
#include <stdio.h>
typedef long long int ll;
ll num[10][10];
ll gcd(ll x,ll y)
{
if(y==0) return x;
else return gcd(y,x%y);
}
int main()
{
ll i,j ,k,a,b,c;
ll A,B,C,D,E,F,x,y,z;
scanf("%d %d %d",&a,&b,&c);//存储所满足的比例关系
for( i = 1;i <= 3;i++)
{
for(j = 1;j <=3;j++)
{
scanf("%d",&num[i][j]);//三种物质的占比
}
}
// A = a*num[1][2]-b*num[1][1];B = a*num[2][2]-b*num[2][1];
//数学公式的代入计算
A=a*num[1][2]-b*num[1][1];B=a*num[2][2]-b*num[2][1];C=a*num[3][2]-b*num[3][1];
D=b*num[1][3]-c*num[1][2];E=b*num[2][3]-c*num[2][2];F=b*num[3][3]-c*num[3][2];
x=-B*F+C*E; y=-D*C+A*F; z=-A*E+B*D;//化简过程中的式子
if(x < 0||y < 0||z < 0)//排除为负的情况
{
printf("NONE\n");
return 0;
}
ll temp = gcd(x ,y);
temp = gcd(temp,z);//求最大公约数
printf("%lld %lld %lld %lld\n",x/temp,y/temp,z/temp,(x*num[1][1]+y*num[2][1]+z*num[3][1])/(a*temp));//计算所满足的最小值
return 0;
}
6 分
2 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复