64 饲料调配
作者: xxx时间限制: 2S章节: 二维数组
问题描述 :
农夫约翰从来只用调配得最好的饲料来为他的奶牛。
饲料用三种原料调配成:大麦,燕麦和小麦。他知道自己的饲料精确的配比,在市场上是买不到这样的饲料的。他只好购买其他三种混合饲料(同样都由三种麦子组成),然后将它们混合,来调配他的完美饲料。
给出三组整数,表示 大麦:燕麦:小麦 的比例,找出用这三种饲料调配 x:y:z 的饲料的方法。
例如,给出目标饲料 3:4:5 和三种饲料的比例:
1:2:3
3:7:1
2:1:2
你必须编程找出使这三种饲料用量最少的方案,要是不能用这三种饲料调配目标饲料,输出’NONE’。'用量最少’意味着三种饲料的用量(整数)的和必须最小。
对于上面的例子,你可以用8份饲料1,2份饲料2,和5份饲料3,来得到7份目标饲料: 8*(1:2:3) + 1*(3:7:1) + 5*(2:1:2) = (21:28:35) = 7*(3:4:5)
以上数字中,表示饲料比例的整数都是小于100(数量级)的非负整数,表示各种饲料的份数的整数都小于100。一种混合物的比例不会由其他混合物的比例直接相加得到。
输入说明 :
Line 1: 三个用空格分开的整数,表示目标饲料
Line 2…4: 每行包括三个用空格分开的整数,表示农夫约翰买进的饲料的比例
输出说明 :
输出文件要包括一行,这一行要么有四个整数,要么是’NONE’。前三个整数表示三种饲料的份数,用这样的配比可以得到目标饲料。第四个整数表示混合前三种饲料后得到的目标饲料的份数。
输入范例 :
3 4 5
1 2 3
3 7 1
2 1 2
输出范例 :
8 1 5 7
#include <stdio.h>
int main() {
int x,y,z;
while(scanf("%d%d%d",&x,&y,&z)!=EOF) {
int a[3];//第一份饲料
int b[3];//第二份饲料
int c[3];//第三份饲料
int store[100][4];//存储总和 与饲料比
int count=0;
int i,j,k;
scanf("%d%d%d",&a[0],&a[1],&a[2]);
scanf("%d%d%d",&b[0],&b[1],&b[2]);
scanf("%d%d%d",&c[0],&c[1],&c[2]);
int flag=0;
int biaozhi=0;
for(i=0; i<100; i++) {
for(j=0; j<100; j++)
for(k=0; k<100; k++) {
if(i==0&&(j==0&&k==0)) {
continue;
}
if(x!=0&&(i*a[0]+j*b[0]+k*c[0])%x==0) {
if(y!=0&&(i*a[1]+j*b[1]+k*c[1])%y==0) {
if(z!=0&&(i*a[2]+j*b[2]+k*c[2])%z==0) {
if((i*a[0]+j*b[0]+k*c[0])/x==(i*a[1]+j*b[1]+k*c[1])/y&&(i*a[1]+j*b[1]+k*c[1])/y==(i*a[2]+j*b[2]+k*c[2])/z)
biaozhi=1;
if(biaozhi==1) {
int sum=i+j+k;
store[count][0]=sum;
store[count][1]=i;
store[count][2]=j;
store[count++][3]=k;
flag=1;
biaozhi=0;
}
} else if(z==0) {
//z==0
if((i*a[0]+j*b[0]+k*c[0])%x==0) {
if((i*a[1]+j*b[1]+k*c[1])%y==0) {
if((i*a[2]+j*b[2]+k*c[2])==0)
if((i*a[0]+j*b[0]+k*c[0])/x==(i*a[1]+j*b[1]+k*c[1])/y)
biaozhi=1;
if(biaozhi==1) {
int sum=i+j+k;
store[count][0]=sum;
store[count][1]=i;
store[count][2]=j;
store[count++][3]=k;
flag=1;
biaozhi=0;
}
}
}
}
}
}
}
}
if(flag==0) {
printf("NONE\n");
continue;
}
int index=0;
for(i=1; i<count; i++)
if(store[i][0]<store[index][0])
index=i;
int fenshu=(store[index][1]*a[0]+store[index][2]*b[0]+store[index][3]*c[0])/x;
printf("%d %d %d %d\n",store[index][1],store[index][2],store[index][3],fenshu);
}
return 0;
}
题目可以AC了,还有部分情况为0实在是不想编写了,太呕心了