思路分析:在面对这道题的时候,我们很容易想到采用数学的方法直接求解。

  1. #include <stdio.h>
  2. typedef long long int ll;
  3. ll num[10][10];
  4. ll gcd(ll x,ll y)
  5. {
  6. if(y==0) return x;
  7. else return gcd(y,x%y);
  8. }
  9. int main()
  10. {
  11. ll i,j ,k,a,b,c;
  12. ll A,B,C,D,E,F,x,y,z;
  13. scanf("%d %d %d",&a,&b,&c);//存储所满足的比例关系
  14. for( i = 1;i <= 3;i++)
  15. {
  16. for(j = 1;j <=3;j++)
  17. {
  18. scanf("%d",&num[i][j]);//三种物质的占比
  19. }
  20. }
  21. // A = a*num[1][2]-b*num[1][1];B = a*num[2][2]-b*num[2][1];
  22. //数学公式的代入计算
  23. 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];
  24. 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];
  25. x=-B*F+C*E; y=-D*C+A*F; z=-A*E+B*D;//化简过程中的式子
  26. if(x < 0||y < 0||z < 0)//排除为负的情况
  27. {
  28. printf("NONE\n");
  29. return 0;
  30. }
  31. ll temp = gcd(x ,y);
  32. temp = gcd(temp,z);//求最大公约数
  33. 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));//计算所满足的最小值
  34. return 0;
  35. }
点赞(0)
 

6 分

2 人评分

 

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论