| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2121 人关注过本帖
标题:想了5天,还是不知道怎么写!求大神教我!
取消只看楼主 加入收藏
林沛那
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2016-3-4
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:4 
想了5天,还是不知道怎么写!求大神教我!
【问题描述】
A公司有一台钢管切割机提供钢管加工业务。钢管切割机每次可以将一根钢管按照要求在指定位置切割为2段。每次切割的费用为钢管的长度。
给定一根长度为L的钢管,要求将其在位置l1<l2<...<ln;处切割为的n+1段钢管,应如何切割才能使总切割费用最小。
【要求】
【数据输入】多组测试数据。
每组数据第1行有2个正整数L和n,L表示钢管的长度,n表示切割次数。第2行有n个正整数,表示切割位置l1<l2<...<ln。其中,0<L<5001,0<n<501。
【数据输出】最小切割总费用并换行.
【样例输入】
15 4
3 9 12 14
【样例输出】
33
搜索更多相关主题的帖子: 切割机 
2016-03-08 08:22
林沛那
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2016-3-4
收藏
得分:0 
回复 4楼 拉链
你这个l+s+s什么意思,能不能给全部代码给我看下!
2016-03-08 13:51
林沛那
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2016-3-4
收藏
得分:0 
回复 8楼 拉链
#include<stdio.h>
int main()
{
    int L,n,i,min,h,sum=0,m,a[501],b[501],c[501],j,k;
    printf("输入钢管的长度:");
    scanf("%d",&L);
    printf("输入切割的次数:");
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        printf("输入切割位置:");
        scanf("%d",&a[i]);
    }
    b[0]=a[0];
    for(i=1;i<n;i++)
    {
        b[i]=a[i]-a[i-1];
    }
    b[i]=L-a[i-1];
    k=n;
    for(m=0;m<n;m++)
    {
        for(i=0;i<k;i++)
        {
            c[i]=b[i]+b[i+1];
            
        }
        min=L;
        for(i=0;i<k;i++)
        {
            if(c[i]<min)
            {
                min=c[i];
                h=i;
            }
        }
        sum=sum+min;
        for(j=0;j<k;j++)
        {
            if(h==j)
                b[j]=min;
            if(j<h)
                b[j]=b[j];
            if(j>h)
                b[j]=b[j+1];
        }
        k=k-1;
    }
    printf("输出最少花费:%d\n",sum);
    return 0;
}
2016-03-09 07:27
林沛那
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2016-3-4
收藏
得分:0 
回复 9楼 拉链
看你昨天没回话,我下午就换了一种思路。#include<stdio.h>
int main()
{
    int L,n,i,min,h,sum=0,m,a[501],b[501],c[501],j,k;
    printf("输入钢管的长度:");
    scanf("%d",&L);
    printf("输入切割的次数:");
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        printf("输入切割位置:");
        scanf("%d",&a[i]);
    }
    b[0]=a[0];
    for(i=1;i<n;i++)
    {
        b[i]=a[i]-a[i-1];
    }
    b[i]=L-a[i-1];
    k=n;
    for(m=0;m<n;m++)
    {
        for(i=0;i<k;i++)
        {
            c[i]=b[i]+b[i+1];
            
        }
        min=L;
        for(i=0;i<k;i++)
        {
            if(c[i]<min)
            {
                min=c[i];
                h=i;
            }
        }
        sum=sum+min;
        for(j=0;j<k;j++)
        {
            if(h==j)
                b[j]=min;
            if(j<h)
                b[j]=b[j];
            if(j>h)
                b[j]=b[j+1];
        }
        k=k-1;
    }
    printf("输出最少花费:%d\n",sum);
    return 0;
}
2016-03-09 07:31
林沛那
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2016-3-4
收藏
得分:0 
回复 8楼 拉链
看你昨天不回话,我今天要交报告了!我就逆着写。#include<stdio.h>
int main()
{
    int L,n,i,min,h,sum=0,m,a[501],b[501],c[501],j,k;
    printf("输入钢管的长度:");
    scanf("%d",&L);
    printf("输入切割的次数:");
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        printf("输入切割位置:");
        scanf("%d",&a[i]);
    }
    b[0]=a[0];
    for(i=1;i<n;i++)
    {
        b[i]=a[i]-a[i-1];
    }
    b[i]=L-a[i-1];
    k=n;
    for(m=0;m<n;m++)
    {
        for(i=0;i<k;i++)
        {
            c[i]=b[i]+b[i+1];
            
        }
        min=L;
        for(i=0;i<k;i++)
        {
            if(c[i]<min)
            {
                min=c[i];
                h=i;
            }
        }
        sum=sum+min;
        for(j=0;j<k;j++)
        {
            if(h==j)
                b[j]=min;
            if(j<h)
                b[j]=b[j];
            if(j>h)
                b[j]=b[j+1];
        }
        k=k-1;
    }
    printf("输出最少花费:%d\n",sum);
    return 0;
}
2016-03-09 07:33
快速回复:想了5天,还是不知道怎么写!求大神教我!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018692 second(s), 9 queries.
Copyright©2004-2025, BC-CN.NET, All Rights Reserved