题意:告诉你目标饲料的原料的用量,问你有三种饲料,没种原料比例都不同,问你是否能配比出目标饲料
解题思路:纯暴力
解题代码:
1 // File Name: ratios1.c 2 // Author: darkdream 3 // Created Time: 2014年03月18日 星期二 08时33分08秒 4 /* 5 ID: dream.y1 6 PROG: ratios 7 LANG: C++ 8 */ 9 #include<stdio.h> 10 #include<string.h> 11 #include<stdlib.h> 12 #include<time.h> 13 #include<math.h> 14 #include<limits.h> 15 int ans[5]; 16 int a[4][4]; 17 int stand[4]; 18 int sum = INT_MAX; 19 int gcd(int a, int b ) 20 { 21 if(a == 0 && b == 0 ) 22 return 1; 23 return b == 0 ? a:gcd(b,a%b); 24 } 25 int main(){ 26 27 freopen("ratios.in","r",stdin); 28 freopen("ratios.out","w",stdout); 29 for(int i =1 ;i <= 3; i++) 30 scanf("%d",&stand[i]); 31 for(int i = 1;i <= 3;i ++) 32 for(int j = 1;j <= 3;j ++) 33 { 34 scanf("%d",&a[i][j]); 35 } 36 int bok = 0 ; 37 for(int i = 0;i <= 100;i ++) 38 for(int j = 0;j <= 100; j ++) 39 for(int ij = 0;ij <= 100 ;ij ++) 40 { 41 if(!(i || j || ij)) 42 continue; 43 int temp[4]; 44 temp[1] = i * a[1][1] + j * a[2][1] + ij * a[3][1]; 45 temp[2] = i * a[1][2] + j * a[2][2] + ij * a[3][2]; 46 temp[3] = i * a[1][3] + j * a[2][3] + ij * a[3][3]; 47 int ok = 0 ; 48 int pp; 49 for(int ji =1;ji <= 3;ji ++) 50 if(stand[ji] != 0 && temp[ji] / stand[ji] != 0) 51 pp = temp[ji]/ stand[ji]; 52 for(int ji = 1;ji <= 3;ji ++) 53 if(stand[ji] *pp != temp[ji]) 54 { 55 ok = 1; 56 break; 57 } 58 // if(i == 2 && j == 0 && ij == 1) 59 // printf("%d %d %d ",temp[1],temp[2],temp[3]); 60 if(!ok) 61 { 62 bok = 1; 63 int tsum = i + j + ij; 64 if(tsum < sum ) 65 { 66 sum = tsum; 67 ans[1] = i ; 68 ans[2] = j ; 69 ans[3] = ij; 70 ans[4] = pp; 71 } 72 } 73 74 } 75 if(bok) 76 { 77 for(int i = 1;i <= 4;i ++) 78 printf(i == 1?"%d":" %d",ans[i]); 79 printf(" "); 80 } 81 else printf("NONE "); 82 return 0 ; 83 }