标题:求大神教我,想了一天都不知道怎么做!
只看楼主
weisx
Rank: 1
来 自:吉林
等 级:新手上路
帖 子:20
专家分:0
注 册:2016-2-29
结帖率:100%
已结贴  问题点数:10 回复次数:10 
求大神教我,想了一天都不知道怎么做!
问题描述】
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-03 12:53
qq1023569223
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:湖南科技大学
等 级:贵宾
威 望:26
帖 子:2753
专家分:13404
注 册:2010-12-22
得分:0 
这问题我觉得奇怪,切割的费用为钢管的长度,例如一根切成两根,费用是原来那根的长度,还是切成的两根之一的长度?切割位置定了,还要问怎么切?

   唯实惟新 至诚致志
2016-03-03 13:16
weisx
Rank: 1
来 自:吉林
等 级:新手上路
帖 子:20
专家分:0
注 册:2016-2-29
得分:0 
回复 2楼 qq1023569223
第一刀在9处,此时费用15,第2刀在3处,费用9,因为这段管子长度9,第三刀在12处,把管子切成了3+3的长度费用6,第四刀在14,费用3,因为此时管子长度为3.就是切距离L/2近的地方。我不知道怎么写
2016-03-03 13:38
qq1023569223
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:湖南科技大学
等 级:贵宾
威 望:26
帖 子:2753
专家分:13404
注 册:2010-12-22
得分:0 
回复 3楼 weisx
我刚想了一下,觉得好难,这像是在考奥数,而不是C语言。

   唯实惟新 至诚致志
2016-03-03 13:57
weisx
Rank: 1
来 自:吉林
等 级:新手上路
帖 子:20
专家分:0
注 册:2016-2-29
得分:0 
回复 4楼 qq1023569223
我还有一个,你帮我看看!题目52:产品销售统计
一家公司生产五种产品,每种产品在一个月内每周的生产数量和销售价格都要记录下来。并做以下的分析:
(1) 每种产品每周的生产值和销售值;
(2) 每种产品一个月的生产值和销售值;
(3) 所有产品一个月内的生产值;
(4) 所有产品一个月内的销售值。
下面是一个二维的表格,表格的每一行记录了五种产品分别在这一周的生产量,每一列记录了每种产品分别在四个星期中的生产量:
M11
M12
M13
M14
M15
M21
M22
M23
M24
M25
M31
M32
M33
M34
M35
M41
M42
M43
M44
M45
   其中,Mij表示在第i周中第j种产品的生产量。
 
下面是一个二维的表格,表格的每一行记录了五种产品分别在这一周的销售量,每一列记录了每种产品分别在四个星期中的销售量:
S11
S12
S13
S14
S15
S21
S22
S23
S24
S25
S31
S32
S33
S34
S35
S41
S42
S43
S44
S45
其中,Sij表示在第i周中第j种产品的销售量。
下面是一个一维表格,表示五种产品的单价。
C1
C2
C3
C4
C5
其中,Cj表示第j种产品的单价。
 
根据以上内容,编程要求:
(1)计算每种产品每周的生产值和销售值;
(2)计算所有产品每周的生产值和销售值;
(3)计算每种产品一个月内的生产值和销售值;
(4)计算所有产品生产总值和销售总值;
(5)按以下要求和格式显示:
当输入数字1,显示每种产品每周生产值和销售值;当输入数字2,显示所有产品每周的生产值和销售值;当输入数字3,显示每种产品一个月内的生产值和销售值;当输入数字4,显示所有产品生产总值和销售总值;当输入数字5,显示退出。
显示格式示例如下:
每种产品每周的生产值
Week(1)  110  300  360  210  325
Week(2)  ………………………………
Week(3)  ………………………………
Week(4)  ………………………………
每种产品每周的销售值
Week(1)  110  300  360  210  325
Week(2)  ………………………………
Week(3)  ………………………………
Week(4)  ………………………………
每周所有产品的生产值和销售值
               生产值      销售值
Week(1)       1300        1230
Week(2)        …          …
Week(3)        …          …
Week(4)        …          …
每种产品一个月内的生产值和销售值
生产值      销售值
Product(1)      500          450
Product(2)       …          …
Product(3)       …          …
Product(4)       …          …
所有产品一个月的生产总值和销售总值
Total product = 5220
Total sales   = 4450
 
2016-03-03 14:12
qq1023569223
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:湖南科技大学
等 级:贵宾
威 望:26
帖 子:2753
专家分:13404
注 册:2010-12-22
得分:0 
这个用数组做就可以,思路比较简单但比较繁琐就是,你确定不会?凡事要先自己想想,有不明白的再来问我们。

   唯实惟新 至诚致志
2016-03-03 14:22
qq1023569223
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:湖南科技大学
等 级:贵宾
威 望:26
帖 子:2753
专家分:13404
注 册:2010-12-22
得分:6 
你可以参考下我写的,销量价格什么的,我是随意赋值的。有好多类似的问题,比如统计成绩什么的,思路是一样的。
程序代码:
#include <stdio.h>

void output1(int m[][5],int n[][5],int s[]);
void output2(int m[][5],int n[][5],int s[]);
void output3(int m[][5],int n[][5],int s[]);
void output4(int m[][5],int n[][5],int s[]);

int main ()
{
    int M[4][5],S[4][5],C[5];
    int i,j;

    for(i=0;i<4;i++)
    {
        for(j=0;j<5;j++)
        {
            M[i][j]=(i+1)*100+(j+1)*10;
            S[i][j]=M[i][j]-(j+1);
        }
    }

    for(i=0;i<5;i++)
    {
        C[i]=(i+1)*10+i;
    }

    printf("(1) Product and sales of different week and different product\n");
    printf("(2) Total product and sales every week\n");
    printf("(3) Total product and sales of different product in a month\n");
    printf("(4) Total product and sales in a month\n");
    printf("(5) Press 5 to EXIT\n");

    int ce=1;
    while(ce!=5)
    {
        scanf("%d",&ce);

        switch(ce)
        {
            case 1: output1(M,S,C); break;
            case 2: output2(M,S,C); break;
            case 3: output3(M,S,C); break;
            case 4: output4(M,S,C); break;
            case 5: break;
            default: break;
        }
    }

    return 0;
}

void output1(int m[][5],int n[][5],int s[])
{
    printf("Product of different week and different product:\n");

    int i,j;
    for(i=0;i<4;i++)
    {
        printf("Week(%d) ",i+1);
        for(j=0;j<5;j++)
        {
            printf("%5d ",m[i][j]*s[j]);
        }
        printf("\n");
    }

    printf("Sales of different week and different product:\n");

    for(i=0;i<4;i++)
    {
        printf("Week(%d) ",i+1);
        for(j=0;j<5;j++)
        {
            printf("%5d ",n[i][j]*s[j]);
        }
        printf("\n");
    }
}

void output2(int m[][5],int n[][5],int s[])
{
    printf("Total product and sales every week:\n");

    int i,j,sum;
    for(i=0;i<4;i++)
    {
        printf("Week(%d) ",i+1);

        sum=0;
        for(j=0;j<5;j++)
        {
            sum+=m[i][j]*s[j];
        }
        printf("%d ",sum);

        sum=0;
        for(j=0;j<5;j++)
        {
            sum+=n[i][j]*s[j];
        }
        printf("%d\n",sum);
    }
}

void output3(int m[][5],int n[][5],int s[])
{
    int i,j,sum;
    printf("Total product and sales of different product in a month:\n");

    for(i=0;i<5;i++)
    {
        printf("Product(%d) ",i+1);

        sum=0;
        for(j=0;j<4;j++)
        {
            sum+=m[j][i]*s[i];
        }
        printf("%d ",sum);

        sum=0;
        for(j=0;j<4;j++)
        {
            sum+=n[j][i]*s[i];
        }
        printf("%d\n",sum);
    }
}

void output4(int m[][5],int n[][5],int s[])
{
    int i,j,sum1=0,sum2=0;
    printf("Total product and sales in a month:\n");

    for(i=0;i<5;i++)
    {
        for(j=0;j<4;j++)
        {
            sum1+=m[j][i]*s[i];
        }

        for(j=0;j<4;j++)
        {
            sum2+=n[j][i]*s[i];
        }
    }

    printf("Total product = %d\n",sum1);
    printf("Total sales   = %d\n",sum2);
}


[此贴子已经被作者于2016-3-3 16:10编辑过]


   唯实惟新 至诚致志
2016-03-03 16:04
拉链
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:107
专家分:534
注 册:2016-1-22
得分:4 
回复 3楼 weisx
这样啊,可用一个递归解决,递归函数如下:
int ff(int a[],int l,int s)
{
递归结束条件是数组a内数据全0,return 0
1、通过扫描切割点数组结合长度l和起点s判断切割点a[n]
2、j=a[n],a[n]=0
3、return l+ff(a,j-s,s)+ff(a,l+s-j,j)
}

[此贴子已经被作者于2016-3-3 17:21编辑过]

2016-03-03 17:18
weisx
Rank: 1
来 自:吉林
等 级:新手上路
帖 子:20
专家分:0
注 册:2016-2-29
得分:0 
回复 8楼 拉链
就是数组这没学好,不知道怎么编!
2016-03-03 19:13
weisx
Rank: 1
来 自:吉林
等 级:新手上路
帖 子:20
专家分:0
注 册:2016-2-29
得分:0 
回复 8楼 拉链
就是数组这没学好,不知道怎么编!
2016-03-03 19:20



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-462101-1-1.html




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

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018058 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved