| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1981 人关注过本帖, 1 人收藏
标题:如何用数组求这类问题(纪念邮票)
只看楼主 加入收藏
ClearningC
Rank: 2
等 级:论坛游民
帖 子:98
专家分:43
注 册:2016-10-26
结帖率:89.47%
收藏(1)
 问题点数:0 回复次数:5 
如何用数组求这类问题(纪念邮票)
邮局最近推出了一套特殊的纪念邮票,这套邮票共有N张,邮票面值各不相同,按编号顺序为1分,2分,......,N分。

小杭是个集邮爱好者,他很喜欢这套邮票,可惜现在他身上只有M分,并不够把全套都买下。他希望尽量买,最好刚好花光所有钱。作为一个集邮爱好者,小杭也不想买的邮票编号断断续续。所以小杭打算买面值a分至b分的b-a+1张连续的邮票,且总价值刚好为M分。(1<=N,M<= 1,000,000,000)

你的任务是求出所有符合要求的方案,以[a,b]的形式输出。输出文件每行包含一个合法方案:[a,b].按a值从小到大输出。
搜索更多相关主题的帖子: 纪念邮票 爱好者 如何 最好 
2016-11-20 19:57
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
这里有个简易式的,求不了1000000000的值,等下改进应该可以了~先顶着吧

数列求和问题:
#include<stdio.h>
int main()
{
    int i,j,m;
    scanf("%d",&m);
    for (i=1;i<=m;i++)
        for (j=i;j<=m;j++)
        {
            if ((i+j)*(j-i+1)==2*m)//这个就是题目要求a,b的解
            {
                printf("[%d,%d]\n",i,j);
                break;
            }
            if ((i+j)*(j-i+1)>2*m)
                break;/*囧,没加这句多了情况,原来是数据溢出而得到错误的结果~~不过即使如此,数据太大还是会导致数据溢出,计算100,000以内的数据
                没有问题*/
               
        }
    return 0;
}

[此贴子已经被作者于2016-11-21 02:33编辑过]


[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2016-11-21 00:00
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
这里是成功版的~,可以轻松求m=1000,000,000的情况~上楼的传统做法可以忽略~
程序代码:
#include<stdio.h>
#include<math.h>
int main()
{
    double i,m;
    double count;//count代表票数
    scanf("%lf",&m);//m,预设手头金额
    count=(int)sqrt(2*m);//sqrt(2*m)约为能购买最多票
    for (i=count;i;i--)//票数递减为0时结束循环
        if (m/i-floor(m/i)-((i-1)/2-floor((i-1)/2))==0)//数学数列求和变形--n*(n+1)/2的变形公式,首项-末项=票数-1,项数=票数~然后判断其是否为整数
            printf("[%.f,%.f]\n",m/i-(i-1)/2,m/i+(i-1)/2);//输出首项和末项
    return 0;
}




图片附件: 游客没有浏览图片的权限,请 登录注册


[此贴子已经被作者于2016-11-21 04:19编辑过]


[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2016-11-21 02:05
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
做完后再看帖,忽然发现题目要求用数组,我囧~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2016-11-21 04:24
a969798593
Rank: 2
等 级:论坛游民
威 望:1
帖 子:21
专家分:70
注 册:2016-10-13
收藏
得分:0 
贪婪算法应该就可以
2016-11-21 08:47
ClearningC
Rank: 2
等 级:论坛游民
帖 子:98
专家分:43
注 册:2016-10-26
收藏
得分:0 
回复 4楼 九转星河
谢谢你了!不过你真的好厉害啊,我一点思路都没有,不知道要怎么弄,而你却那么容易写出来,而且代码还很简短。
2016-11-21 08:47
快速回复:如何用数组求这类问题(纪念邮票)
数据加载中...
 
   



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

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