标题:求此题解解题思路最有附加代码
只看楼主
玩出来的代码
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:河南新乡
等 级:贵宾
威 望:11
帖 子:742
专家分:2989
注 册:2009-10-12
得分:0 
   你没有理由沮丧
        为了你是秋日
    彷惶

    你也没有理由骄矜
        为了你是春天
    把头仰

    秋色不如春光美
    春光也不比秋色强

睡觉了……

离恨恰如春草,更行更远还生。
2010-04-11 00:05
itma
Rank: 4
等 级:业余侠客
帖 子:105
专家分:266
注 册:2010-2-8
得分:0 
以下是引用Devil_W在2010-4-10 23:25:53的发言:

#include
using namespace std;
class cost{
public:
    cost(int count=0){
        count_month=count;
        buf=new int[count_month];
    }
    cost(int count,int hire,int sal,int fire)
        {
            count_month=count;
            cost_hire=hire;
            salary=sal;
            cost_fire=fire;
            buf=new int[count_month];
            for(int i=0;i
对的,膜拜。
2010-04-11 00:36
草狼
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:2
帖 子:577
专家分:1040
注 册:2010-4-6
得分:0 
回复 10楼 Devil_W
c++代码不可以  别且我在VC6.0下面编译错误了- -!  个人感觉你的思想跟前一个给代码的人一样的你测试下这组数据对不对:
4
4 3 6
12 10 9 11;看答案是多少;
2010-04-11 06:33
寒风中的细雨
Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17
等 级:贵宾
威 望:66
帖 子:1710
专家分:8645
注 册:2009-9-15
得分:0 
#include <stdio.h>

int mon, sal, fir, hir;
int a[12];

void Init();
int Sal_sum();
int Fir_sum();

int main()
{
    int min = 0;

    Init();
    min += Sal_sum();
    min += Fir_sum();

    printf("%d\n", min);
    return 0;
}


void Init()
{
    printf( "分别输入salary,fire,hire的单价:" );
    scanf("%d%d%d",&sal, &fir, &hir );
    printf( "输入工程所需要的时间(按月计算):" );
    scanf("%d", &mon );
    printf( "输入各个月所需要的最少员工人数:" );
    for(int i=0; i<mon; i++ )
        scanf("%d", &a[i] );
}

int Sal_sum()
{
    int i, sum = 0;
    for( i = 0; i<mon; i++ )
        sum += a[i];
    sum *= sal;
    sum += a[0]*hir;
    return sum;
}

int Fir_sum()
{
    int dec = 0;
    for( int i = 0; i<mon-1; )
    {
        int flag = 0;//定义一个累加数 进行判断
        if( a[i]<a[i+1] )
        {
            dec += (a[i+1]-a[i])*hir;
            i++;
            continue;
        }
        if( a[i]>a[i+1] )
        {
            int j = i+1;
            while( j<mon && (a[i+1]>=a[j]) )//判断有几个非递增的数
            {
                flag += 1;
                j++;
            }
            if( j == mon )
            {
                if(  flag*sal > fir )//总薪水大于解雇
                    dec += (a[i]-a[i+1])*fir;
                else
                {
                    dec += (a[i]-a[i+1])*sal;
                    a[i+1] = a[i];
                }
            }
            else
            {
                if( flag*sal > hir+fir )
                    dec += (a[i]-a[i+1])*fir;
                else
                {
                    dec += (a[i]-a[i+1])*sal;
                    a[i+1] = a[i];
                }
            }
        }i++;   
    }   
    return dec;
}
                    
            

2010-04-11 08:16
liyang04300
Rank: 2
等 级:论坛游民
帖 子:75
专家分:94
注 册:2010-3-17
得分:0 
#include"stdio.h"
#include"stdlib.h"
main()
{int month,salary,hire,fire,i,sum,minimonth;
 char a[];/*每个月的实际人数*/
 sum=0;
 scanf("it need %d to finish the programe",&month);
 scanf("each person will have %d every month",&salary);
 scanf("it need %d to have a person",&hire);
 scanf("it need %d to leave a person out",&fire);
 scanf("the smallest number every month need%d",&minimonth);
 scanf("%c",&a[]);
 for(i=1;i<=month;i++)
 {scanf("%c",&a[i]);
 if(a[i]>=mininumber)
 {sum+=a[i]*salary+(a[i]-mininumber)*hire;
 mininumber=a[i];
 }
 else
 {if(salary>fire)
 sum+=hire*(minimonth-a[i])+salary*a[i];
 else
 sum+=salary*minimonth;
 mininumber=a[i];
 }
 printf("%d",sum);
 getch();
 return();
 }
2010-04-11 10:35
liyang04300
Rank: 2
等 级:论坛游民
帖 子:75
专家分:94
注 册:2010-3-17
得分:0 
同意九楼的思路,看来我弄错了!
2010-04-11 11:29
Devil_W
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:9
帖 子:1160
专家分:1797
注 册:2009-9-14
得分:0 
回复 13楼 草狼
-BASH-4.0.35$ cat input
4
4 3 6
12 10 9 11
-BASH-4.0.35$ ./test <input
192
-BASH-4.0.35$


VC这年头还有谁用?我这代码你的VC都Build不过去,真的应该把你的VC扔掉换个IDE了。

你还是把OJ的地址贴出来,我去ac掉。

这种水题,没有理由搞不定。
2010-04-11 12:07
hahayezhe
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖南张家界
等 级:贵宾
威 望:24
帖 子:1386
专家分:6999
注 册:2010-3-8
得分:0 
程序代码:
#include "stdafx.h"
#include<iostream>
using namespace std;
class Cost{
public:
    Cost(int month,int hire,int sal,int fire);
    ~Cost(){delete [] Workers;}
    bool SetWorkers();
    int Money();
private:
    int Months;
    int Hires;
    int Salarys;
    int Fires;
    int *Workers;
};
Cost::Cost(int month,int hire,int sal,int fire)
{
    Months = month;
    Hires = hire;
    Salarys = sal;
    Fires = fire;
    Workers = new int [Months];
}
bool Cost::SetWorkers()
{
    if(0 == Months)
        return false;
    for(int i=0;i<Months;i++)
        cin>>Workers[i];
    return true;
}
int Cost::Money()
{
    int sum=0,sum1=0,sum2=0;
    for(int i=0;i<Months;i++)
    {   
        sum+=Workers[i];
        if(i!=Months-1)
        {
            if(Workers[i]>Workers[i+1])
             sum1+=(Workers[i]-Workers[i+1]);
            else
            sum2+=(Workers[i+1]-Workers[i]);
        }
    }
    sum=Salarys*sum+Hires*(Workers[0]+sum2)+(Fires-Salarys)*sum1;
    return sum;
}
int main()
{
    //int month,hire,sal,fire;
    //cin<<month<<hire<<sal<<fire;
    Cost c(3,4,5,6);
    if(c.SetWorkers())
    cout<<c.Money()<<endl;
    else
        cout<<"month not 0";
    return 0;
}
照着改了改
2010-04-11 12:12
Devil_W
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:9
帖 子:1160
专家分:1797
注 册:2009-9-14
得分:0 
楼上的代码肯定是错的。

至少我稍微瞄了一眼,改我的代码,改的不论不类。

虽然我也不确定我的代码能不能ac,但是,你的是肯定不能的。

你有没有想过,如果fire 一个人的cost比 他的salary还贵。

你觉得还有必要fire他吗?

虽然你的对于sample case是能pass的,个人觉得,那是巧合。
2010-04-11 12:27
hahayezhe
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖南张家界
等 级:贵宾
威 望:24
帖 子:1386
专家分:6999
注 册:2010-3-8
得分:0 
这种题需要深究吗
判断Fires-Salarys而已
你的代码不过扫了一眼而已
你以为是根据你的COPY的?
算法写那么大块 压根就懒的看!
2010-04-11 12:32



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




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

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