首页 新闻 会员 周边 捐助

c++ 最节省材料

0
悬赏园豆:20 [已解决问题] 解决于 2013-11-05 19:19

一个长度为L米的材料,需要截成长度为a米和b米的短材料,求两种短材料各截多少根时,剩余的材料最少。

输入

数据有多行,每行三个整数,分别是L,a,b;

输出

 

每行输出截出a长度和截出b长度材料的根数,结果有多个时,只输出总根数最少或最长材料根数最少的数据。

 

样例输入

10 2 3

 

样例输出

2 2
 
我的怎么错了,求大神。
#include <iostream>
using namespace std;
int main()
{
    int maxa,maxb,l,x,y,min,n,m,i,j,sheng;
    while(cin>>l>>n>>m)
    {
        min=10000;
        maxa=l/n;
        maxb=l/m;
        if(m>n)
        {
            int t=n;//判断大小
            n=m;
            m=t;
        }
        for(i=0;i<=maxa;i++)
            for(j=0;j<maxb;j++)
            {
                sheng=l-i*n-j*m;
                if(sheng<0)
                    continue;
                else
                {
                    if(sheng<=min)
                    {
                        min=sheng;
                        x=i;
                        y=j;
                        if(i<x)
                        {
                            min=sheng;
                            x=i;
                            y=j;
                        }
                        
                    }
                    
                }
            }
            cout<<x<<" "<<y<<endl;
    }
    return 0;
}

 

lzyer的主页 lzyer | 初学一级 | 园豆:130
提问于:2013-09-27 20:56
< >
分享
最佳答案
0

#include<stdio.h>
void main()
{
int L,a,b,x,y,i,j,sub,min;
int maxa,maxb;
printf("请输入材料长度L:");
scanf("%d",&L);
printf("请输入短材料a和b的长度:");
scanf("%d%d",&a,&b);
min=L;
maxa=L/a;//a材料最多的数目
maxb=L/b;//b材料最多是数目
for(i=0;i<=maxa;i++)
for(j=0;j<=maxb;j++)
{
sub=L-i*a-j*b;
if(sub<0)continue;
else
{
if(sub<min)
{
min=sub;
x=i;
y=j;
}
}
}
printf("a材料%d段,b材料%d段\n",x,y);

}

收获园豆:20
城市*斗士(技术) | 菜鸟二级 |园豆:222 | 2013-11-01 10:24

你的方法我提交超时了。

lzyer | 园豆:130 (初学一级) | 2013-11-05 19:17
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册