| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1946 人关注过本帖
标题:想了5天,还是不知道怎么写!求大神教我!
只看楼主 加入收藏
hzxsyzl
Rank: 2
等 级:论坛游民
威 望:1
帖 子:24
专家分:68
注 册:2016-3-8
收藏
得分:0 
题目的意思是,在固定的几个点上切割,按什么顺序割,哪些点先割 ,排列下去 总的费用最少,这样的话和长度什么的都没关系啊,得到的结果就是一个固定的最优排列。
2016-03-08 22:06
林沛那
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.045081 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved