| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2153 人关注过本帖
标题:一道编程题,求指导
只看楼主 加入收藏
岑吼吼
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2014-5-10
结帖率:75%
收藏
已结贴  问题点数:18 回复次数:34 
一道编程题,求指导
Cyin拿到TX的第一份工资,马上实施他的购书计划了。算法已经不能满足cyin了,他打算称霸数据挖掘领域。但TX太抠了,Cyin的购书计划不能一步到位。于是,Cyin打算用尽可能多的钱来买书。请聪明的你,算算Cyin最多能花多少钱?
Input
第一行S,表示Cyin的工资(0 < S < 2000)
第二行n, 表示书的种类(0< n < 2000)
第三行有n个整数,表示每本书的价格pi ( pi <= S)
多组数据输入,且所有数据均为整数。
Output
输出cyin最多能花多少钱,并换行。
Sample Input
5
2
3 4
10
5
2 3 4 4 5
Sample Output
4
10


我有一个想法,但是写出来验证了很多次之后发现不能满足要求,
所以希望大家提供提供自己的思路,如何才能算出最多能花的钱?

还有一个问题:
程序代码:
while(scanf("") != EOF)      //作为输入
{
....
}
printf("");                        //作为输出

想要输出的话,要怎么结束输入,我试过Ctrl +Z,但是整个程序都结束了
搜索更多相关主题的帖子: 计划 领域 买书 种类 
2014-05-12 14:30
top398
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:2
帖 子:427
专家分:857
注 册:2014-5-2
收藏
得分:0 
你是说要运行一次程序,多次输入不同数字求解么?那你可以设置一个结束值,例如当输入工资为0时退出。
你的想法既然写出来了,为何不贴出来呢?

TX不抠,老板怎么富呢?自从老板入股JD后,小京豆开始闭关修炼中……
2014-05-12 14:48
loveClangage
Rank: 8Rank: 8
来 自:广东云浮
等 级:蝙蝠侠
帖 子:326
专家分:891
注 册:2013-8-23
收藏
得分:0 
while(scanf("") != EOF) 百度scanf函数的返回值情况,

编写的程序,不能改变世界,却可以改变自己...
2014-05-12 14:50
岑吼吼
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2014-5-10
收藏
得分:0 
回复 2 楼 top398
我写的不能算出最多能花的钱,满足不了题目的要求
程序代码:
# include <stdio.h>

int main(void)
{
    int wage;
    int n;
    int i,j;
    int a[2000], b[2000] = {0};
    int temp;
    int money,count;
    int sum = 0;

    while(scanf("%d", &wage) != EOF)    //工资
    {
        scanf("%d", &n);        //书的种类

        for(i=0; i<n; i++)      //书的价钱
        {
            scanf("%d", &a[i]);
        }

        for(i=0; i<n; i++)          //价钱由高到低排列
        {
            for(j=0; j<n-1-i; j++)
            {
                if(a[j] < a[j+1])
                {
                    temp =  a[j];
                    a[j] = a[j+1];
                    a[j+1] = temp;
                }
            }
        }

        money = wage;
        sum = 0;
        for(i=0;i<n;i++)                          //这段是自己的想法,检验是错误滴.
        {
            while(money)
            {
                if(money >= a[i])
                {
                    money = money - a[i];
                    sum = sum + a[i];
                }
                else
                {
                    break;
                }
            }
        }

        b[i] = sum;

        ++count;
    }

    for(i=0; i<count; i++)
    {
        printf("%d\n", b[i]);
    }

    return 0;
}


学生一枚,不太懂这些公司的东西~
2014-05-12 14:59
砖家的谎言
Rank: 12Rank: 12Rank: 12
等 级:禁止访问
威 望:30
帖 子:693
专家分:3898
注 册:2013-12-6
收藏
得分:0 
没有明白题目的意思

我不是砖家,要努力成为砖家。
2014-05-12 15:08
kwxx
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:309
专家分:913
注 册:2009-5-11
收藏
得分:5 
我以前好像见过类似的题目,算法很巧,我已经记不清楚了,大致思路是:在一样只买一本的前提下,如果不够加上一本价格大的,超额去掉一本价格小的,反复处理。。。希望对你有所启发。(不好意思,实在记不清具体是怎么做的。)

[ 本帖最后由 kwxx 于 2014-5-12 16:25 编辑 ]
2014-05-12 15:34
top398
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:2
帖 子:427
专家分:857
注 册:2014-5-2
收藏
得分:0 
楼主的思路会有遗漏,因为只是简单地只要剩余总价大于当前书的价格就递减。楼上 kwxx 的思路应该是正确的,但还不很具体。我也一时想不出什么太好办法,直接一点就是价格从小到大排序,然后开始从小到大依次组合和回溯……
2014-05-12 16:33
岑吼吼
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2014-5-10
收藏
得分:0 
回复 6 楼 kwxx
我试试吧,我也想不出了有什么方法,谢谢啦
2014-05-12 17:04
岑吼吼
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2014-5-10
收藏
得分:0 
回复 7 楼 top398
嗯,我先去试试
2014-05-12 17:05
刘欣2
Rank: 1
等 级:新手上路
帖 子:32
专家分:6
注 册:2014-5-12
收藏
得分:6 
先买书(从价格高的先买)
计算花钱的总数,在与工资比较!
超出的钱在与书本的价格(从大到小)一一比较,
遇到第一个书本价格(小于超出的钱),将这本书退掉。
最后得到你要买的书!
钱也是花的最多的!
2014-05-14 16:43
快速回复:一道编程题,求指导
数据加载中...
 
   



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

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