题目
给出方程组:$$displaystyle left{egin{aligned}11x + 13y + 17z = 2471 \13x + 17y + 11z = 2739end{aligned} ight.$$已知 $x$,$y$,$z$ 均为正整数,请你计算$x$,$y$,$z$相加之和的最小值
解决方法
由空间几何知,方程组确定的是一条直线,加上正整数约束就是一条线段,求线段上的点$x+y+z$的最小值。
确定其中一个可求出另外两个,枚举其中范围较小的,$1 leq z leq 2471 / 17=145 $。
1 #include<bits/stdc++.h> 2 using namespace std; 3 4 //11x+13y=2471-17z=m 5 //13x+17y=2739-11z=n 6 bool get_xy(int z, int& x, int& y) 7 { 8 int m = 2471 - 17 * z; 9 int n = 2739 - 11 * z; 10 int tmp1 = 11 * n - 13 * m; 11 int tmp2 = n - m; 12 if(tmp1 % 18) return false; 13 if(tmp2 % 2) return false; 14 y = tmp1 / 18; 15 x = tmp2 / 2 - 2 * y; 16 if(x < 1 || y < 1) return false; 17 return true; 18 } 19 20 int main() 21 { 22 int maxx = 2471; 23 int x, y; 24 for(int z = 1;z < 150;z++) 25 { 26 if(get_xy(z, x, y)) 27 { 28 //printf("%d %d %d %d ", x, y, z, x+y+z); 29 if((x + y + z) < maxx) 30 { 31 maxx = x + y + z; 32 } 33 } 34 } 35 printf("%d ", maxx); 36 37 return 0; 38 }