简单题,不知道怎么写了半天 ,真是捉急了,暴搜就好了,代码如下,就是要注意下0什么的
#include <stdio.h>
#include <stdlib.h>
int main()
{
FILE *fin=fopen("ratios.in","r");
FILE *fout=fopen("ratios.out","w");
int mixture[5][5]={0};
int ans1[100]={0},ans2[100]={0},ans3[100]={0};
int i,j,k,p,f=0,t,m;
int check[4]={0};
int min=10000,min1,min2,min3;
for(i=0;i<4;i++)
{
for(j=0;j<3;j++)
{
fscanf(fin,"%d",&mixture[i][j]);
}
}
for(i=0;i<100;i++)
{
for(j=0;j<100;j++)
{
for(k=0;k<100;k++)
{
memset(check,0,sizeof(check));
for(p=0;p<3;p++)
{
check[p]=i*mixture[1][p]+j*mixture[2][p]+k*mixture[3][p];
}
if(i||k||j)
{
for(p=0;p<3;p++)
{
if(mixture[0][p]&&!(check[p]%mixture[0][p]))
{
t=check[p]/mixture[0][p];
break;
}
}
if(check[0]==mixture[0][0]*t &&check[1]==mixture[0][1]*t
&&check[2]==t*mixture[0][2])
{
ans1[f]=i;
ans2[f]=j;
ans3[f]=k;
f++;
}
}
}
}
}
if(f==0)
{
fprintf(fout,"NONE\n");
return 0;
}
else
{
for(i=0;i<f;i++)
{
if(ans1[i]+ans2[i]+ans3[i]<min)
{
min=ans1[i]+ans2[i]+ans3[i];
min1=ans1[i];
min2=ans2[i];
min3=ans3[i];
t=(min1*mixture[1][1]+min2*mixture[2][1]+min3*mixture[3][1])/mixture[0][1];
}
}
}
fprintf(fout,"%d %d %d %d\n",min1,min2,min3,t);
return 0;
}