一条算法问题--大神帮忙看看

圣诞老人123 2016-06-26 02:30:01
原题链接:https://nanti.jisuanke.com/t/45
题目:
晓萌这个营养学专家,只吃喝配得最完美的果汁。果汁包括了苹果汁、橘子汁、草莓汁。他知道自己的完美果汁精确的配比,但是在市场上是买不到这样比例的果汁的。他只好购买其他三种混合果汁(同样多含有苹果汁、橘子汁、草莓汁),然后将它们混合,来调配他的完美果汁。

给出三组整数,表示 苹果汁:橘子汁:草莓汁的比例,找出用这三种饲料调配 x:y:z 的饲料的方法。 例如,给出目标饲料 3:4:5 和三种饲料的比例: 1:2:3;3:7:1;2:1:2。你必须编程找出使这三种能买到的混合果汁用量最少的方案,要是不能用这三种混合果汁配出完美果汁,输出“NONE”。“用量最少”意味着三种混合果汁的用量(整数)的和必须最小。

输入第1行为三个空格分隔的整数,表示完美果汁中苹果汁、橘子汁、草莓汁的比例。输入第2-4行则是市场上能买到的三种果汁中苹果汁、橘子汁、草莓汁分别的比例状况。(所有数据均是不大于100的正整数)

输出包括一行,包含被空格分开的四个整数,前三个整数表示三种市场上能买到的果汁依次使用的份数。第四个整数表示混合三种果汁后得到的完美果汁的份数。或输出一行仅包括“NONE”;

样例输入

3 4 5
1 2 3
3 7 1
2 1 2
样例输出

8 1 5 7


我的解答:

#include<stdio.h>
#include<stdlib.h>

int main()
{
int max = 301;
int p1,p2,p3;
int a1,a2,a3,b1,b2,b3,c1,c2,c3;
scanf("%d %d %d",&p1,&p2,&p3);
scanf("%d %d %d",&a1,&a2,&a3);
scanf("%d %d %d",&b1,&b2,&b3);
scanf("%d %d %d",&c1,&c2,&c3);

int x,y,z;
int r1,r2,r3,t;

if(p1 == 0 || p2==0 || p3 == 0){
printf("%s\n","NONE");
return 0;
}

if(p1 != 0 && p2!=0 && p3 != 0){
//i * a1-a3 j * b1-b3 k * c1-c3
for(int i = 0; (i <= 100 && i <= max); i++) {
for(int j = 0; (j <= 100 && j <= max); j++) {
for(int k = 0; (k <= 100 && k <= max); k++) {
x = (a1*i+b1*j+c1*k);
y = (a2*i+b2*j+c2*k);
z = (a3*i+b3*j+c3*k);
//x y z -> p1 p2 p3
//21 28 40 -> 3 4 5
if(x/p1 == y/p2 && y/p2 == z/p3 && (0 == x % p1) && (0 == y % p2) && (0 == z % p3)){
if( i+j+k != 0 && max > i + j + k){
max = i + j + k;
r1 = i; r2 = j; r3 = k;
t = x/p1;
}
}
}
}
}
}

if(max <= 300){
printf("%d %d %d %d\n",r1,r2,r3,t);
}
else{
printf("%s\n","NONE");
}
}


有些数据通不过帮忙看看有啥问题
...全文
235 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
圣诞老人123 2016-06-30
  • 打赏
  • 举报
回复
我改成10000 TLE了,有啥思路,大神指点下.
FancyMouse 2016-06-29
  • 打赏
  • 举报
回复
100不够啊。 1 1 98 98 1 1 1 97 2 要配2 2 96,第一种至少要9119份。枚举到100(或者300)的结论是错的。

33,010

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧