您的位置:首页 > 移动开发 > IOS开发

USACO/ratios 3.2.4

2013-05-01 22:42 267 查看
简单题,不知道怎么写了半天 ,真是捉急了,暴搜就好了,代码如下,就是要注意下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;
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  暴搜