Feed Ratios

来源:互联网 发布:rxjava2 遍历数组 编辑:程序博客网 时间:2024/06/06 03:40

题意:有三种饲料,饲料中均含有大麦、燕麦和小麦这三种成分,并且知道每种饲料中三种成分的比例。求按何比例混合三种饲料可以使大麦、燕麦和小麦的比例为x:y:z


解题思路

  1. 根据输入列出4元线性方程组
  2. 应用Cramer法则可以很方便解决这道题,不再赘述

代码

/*ID: zc.rene1LANG: CPROG: ratios*/#include<stdio.h>#include<stdlib.h>#include<string.h>void Transform(int mixtures[3][3]){    int i, j, temp;    for (i=0; i<3; i++)    {for (j=0; j<i; j++){    temp = mixtures[i][j];    mixtures[i][j] = mixtures[j][i];    mixtures[j][i] = temp;}    }}int GetValue(int mixtures[3][3]){    int p[3];    p[0] = mixtures[0][0] * (mixtures[1][1] * mixtures[2][2] - mixtures[1][2] * mixtures[2][1]);    p[1] = mixtures[0][1] * (mixtures[1][0] * mixtures[2][2] - mixtures[1][2] * mixtures[2][0]);    p[2] = mixtures[0][2] * (mixtures[1][0] * mixtures[2][1] - mixtures[1][1] * mixtures[2][0]);    return p[0] - p[1] + p[2];}void GetResult(int d[4], FILE *fout){    int n, i, temp;    int result[3];    if (d[0] < 0)    {for (i=0; i<4; i++){    d[i] -= 2*d[i];}    }    for (i=0; i<4; i++)    {if (d[i] < 0){    fprintf(fout, "NONE\n");    return ;}    }    for (n=1; n<100; n++)    {temp = 1;for (i=1; i<4; i++){    if (((n * d[i]) % d[0]) != 0)    {temp = 0;break;    }}if (temp == 1){    break;}    }    for (i=0; i<3; i++)    {result[i] = d[i+1] * n / d[0];    }    fprintf(fout, "%d %d %d %d\n", result[0], result[1], result[2], n);}int main(void){    FILE *fin, *fout;    int goal[3];    int mixtures[3][3];    int mixtures_cp[3][3];    int i, j;    int d[4];    fin = fopen("ratios.in", "r");    fout = fopen("ratios.out", "w");    for (i=0; i<3; i++)    {fscanf(fin, "%d", &goal[i]);    }    for (i=0; i<3; i++)    {for (j=0; j<3; j++){    fscanf(fin, "%d", &mixtures[i][j]);}    }    Transform(mixtures);    memcpy(mixtures_cp, mixtures, 9*sizeof(int));    d[0] = GetValue(mixtures);    if (d[0] != 0)    {for (i=1; i<=3; i++){    for (j=0; j<3; j++)    {mixtures[j][i-1] = goal[j];    }    d[i] = GetValue(mixtures);    memcpy(mixtures, mixtures_cp, 9*sizeof(int));}GetResult(d, fout);    }    else    {fprintf(fout, "NONE\n");    }    return 0;}





































原创粉丝点击