| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 964 人关注过本帖
标题:一道C的编程题,要求运行时间不超过1S.哪位大虾帮忙解答一下.非常感谢!
只看楼主 加入收藏
wenleaf
Rank: 2
等 级:论坛游民
帖 子:7
专家分:20
注 册:2009-8-1
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:12 
一道C的编程题,要求运行时间不超过1S.哪位大虾帮忙解答一下.非常感谢!
题目:有若干张邮票,要求从中选取最少的邮票张数凑成一个给定的总值。
如,有1分,3分,3分,3分,4分五张邮票,要求凑成10分,则使用3张邮票:3分、3分、4分即可。
输入:
首先是要求凑成的邮票总值M,M<100
然后是一个数N,N〈20,表示有N张邮票。接下来是N个正整数,分别表示这N张邮票的面值,且以升序排列。
输出:
能够凑成总值M的最少邮票张数。若无解,输出0。
样例输入:
10 5 1 3 3 3 4
样例输出:
3
注意是要求凑的邮票数最少.期待大虾赐教.
搜索更多相关主题的帖子: 解答 运行 感谢 
2009-08-01 10:13
buxx8020882
Rank: 2
等 级:论坛游民
帖 子:4
专家分:10
注 册:2009-7-21
收藏
得分:10 
#include<stdio.h>
#include<conio.h>
#define N 20
void sortnode(int *temp,int n)
{
    int i,j,t;
    for(i=0;i<n-1;i++)
        for(j=0;j<n-1-i;j++)
        {
            if(temp[j+1]>temp[j])
            {
            t=temp[j+1];
            temp[j+1]=temp[j];
            temp[j]=t;
            }
        }
}

void main()
{
    int Mscore=0,Page=0,i,page[N]={0},pages[N]={0},sum=0,k=0;
    
    printf("Please input the score of stamp:\n");/*输入邮票总值*/
    scanf("%d",&Mscore);
    printf("Please input the page:\n");/*输入邮票张数N*/
    scanf("%d",&Page);
    printf("Please input the stamp from 0~~N:\n");/*输入邮票的面值*/
    for(i=0;i<Page;i++)
        scanf("%d",&page[i]);
    sortnode(page,Page);
    for(i=0;i<Page;i++)
    {
        sum=sum+page[i];
        pages[k++]=page[i];
        if(sum<Mscore)
            continue;
        else
        if(sum>Mscore)
        {
            sum=sum-page[i];
            k--;
            pages[k]=0;
        }
        else
        if(sum==Mscore)
            break;
        
    }
    printf("k=%d\n",k);
    for(i=0;i<k;i++)
        printf("%d ",pages[i]);
    printf("\n");
    getch();
}
2009-08-01 14:49
wenleaf
Rank: 2
等 级:论坛游民
帖 子:7
专家分:20
注 册:2009-8-1
收藏
得分:0 
回复 2楼 buxx8020882
谢谢你对本帖的留意.
感谢你把全部代码给打了出来.
但是我有一个问题:就是最后输出pages[i],按示例的结果输出的是 4 ,3, 3;而不是3,3,4.
还有就是假如是凑个9的话,为什么结果是4,3,1;而不是3,3,3?
sortnode是用来把输入的邮票按升序排列.主要是k++把我弄晕了,能否简单解释个,谢谢.
2009-08-01 16:33
CrystalFan
Rank: 8Rank: 8
来 自:江苏南京
等 级:蝙蝠侠
帖 子:187
专家分:802
注 册:2009-7-30
收藏
得分:10 
参加NOI还是ACM?
看题目应该是NOI
2009-08-01 16:37
CrystalFan
Rank: 8Rank: 8
来 自:江苏南京
等 级:蝙蝠侠
帖 子:187
专家分:802
注 册:2009-7-30
收藏
得分:0 
基础题

[[it] 本帖最后由 CrystalFan 于 2009-8-1 16:48 编辑 [/it]]
2009-08-01 16:42
wenleaf
Rank: 2
等 级:论坛游民
帖 子:7
专家分:20
注 册:2009-8-1
收藏
得分:0 
回复 5楼 CrystalFan
那2个比赛我还不够格,那我到哪里去找答案呢?那个NOI有类似的题目吗?
希望大虾,帮忙帮到底,谢谢啦.
2009-08-01 19:20
xiaoyuer110
Rank: 2
等 级:论坛游民
帖 子:37
专家分:17
注 册:2009-7-29
收藏
得分:0 
呵呵!这样你永远都学不会怎么去做!
        让大家给你一个思路!自己去思考去做!才有进步!把人家做出来的东西!自己在用了!请问一下!你什么时候能思考呢?
         
          虽然我是莱鸟!但我知道去思考!
       例如!斐那数例 老师讲过之后!不看编程!自己去想!然后自己去做!如果真的做不出来了!不知道思路!然后在去看例题!
           做出来了!在思考一下!用什么循环能进一步呢?让编程更简单点!
             所以!想跑起来!必须学会自己走起来!那怕是自己跌下去一千次!让别人轻轻的扶一下!自己起来!接着走!
                 希望楼主能自己思考!有自己的思想!

除学者!不是败给程序不懂!而是编的时候不够心细!
2009-08-01 19:32
wenleaf
Rank: 2
等 级:论坛游民
帖 子:7
专家分:20
注 册:2009-8-1
收藏
得分:0 
回复 7楼 xiaoyuer110
呵呵,谢谢.
我是自己想了好久.关键是怎么凑这个数比较头疼,没什么思路.一旦凑不出来,应该减去哪个数不知道怎么判断,个人觉得这和输入的数依赖性太强了.假如是互质的是一回事,不是互质的又是另一回事.
本人基础不好,不知道这个有没有比较好的算法可以参考的.
谢谢你提的建议.
2009-08-01 19:52
CrystalFan
Rank: 8Rank: 8
来 自:江苏南京
等 级:蝙蝠侠
帖 子:187
专家分:802
注 册:2009-7-30
收藏
得分:0 
好多大学都有信息竞赛在线评判系统,提供题目,你做完了可以随时提交,有在线评判功能,马上可以知道自己的程序有没有通过。介绍几个我做过的:

北京大学信息技术竞赛在线测试系统:[url]http://acm.pku.[/url]
题目多,但大多比较难,像你给的题一样,大多全英文(可以在百度上搜到中文翻译),以前我做过,多是ACM的题目,大学生做都很困难。不过做的人多,大部分题目都可以在百度上搜到解题报告。

南京航天航空大学ACM在线评判系统:[url]http://acm.nuaa.[/url]
简单一点,有一些NOI题目,中文题目比较多,入门级题目也比较多。

同济大学:[url]http://acm.tongji.[/url]
也有些比较简单,适合入门、提高级的人做,题目也较多,中文题也不少。同济大学计算机方面应该是很强的。

浙江大学:
[url]http://acm.zju.[/url]
评测系统也很出名的,虽然我没做过。

美国USACO:[url]http://train.[/url]
很出名,我就是从那起家的,那的题目是分级别的,从易到难,很适合初学者,只是,都是英文的(可以在百度上搜到中文翻译)。

其他的我也不熟悉,这个网址上有些介绍,可以看看:
[url]http://www.[/url]
知道名字可以百度一下。

[[it] 本帖最后由 CrystalFan 于 2009-8-2 02:46 编辑 [/it]]
2009-08-02 02:32
CrystalFan
Rank: 8Rank: 8
来 自:江苏南京
等 级:蝙蝠侠
帖 子:187
专家分:802
注 册:2009-7-30
收藏
得分:0 
2楼的算法是错的。
输入
18
6
2 2 5 5 6 8
得到的结果是:
k=4
8 6 2 2
正确的结果应该是:
k=3
8 5 5

[[it] 本帖最后由 CrystalFan 于 2009-8-2 02:55 编辑 [/it]]

x.JPG (7.73 KB)
图片附件: 游客没有浏览图片的权限,请 登录注册
2009-08-02 02:54
快速回复:一道C的编程题,要求运行时间不超过1S.哪位大虾帮忙解答一下.非常感谢!
数据加载中...
 
   



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

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