免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3131 | 回复: 14
打印 上一主题 下一主题

[算法] 请教一个算法问题,如何实现一个连续30天循环队列? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-12-15 11:30 |只看该作者 |倒序浏览
需求是这样的:有一个30天的循环队列,希望有一个算法保证其连续性,难点在有31号和2月份,请介绍一下思路。

论坛徽章:
0
2 [报告]
发表于 2006-12-15 11:43 |只看该作者
没看明白呢
问题描述得形式化清楚一点?

论坛徽章:
0
3 [报告]
发表于 2006-12-15 11:50 |只看该作者
也就是说,需要把一年的365天采用一种简单的算法使之循环30天。我的一个考虑:计算出今天是今年的第几天,然后%30。这样的话,有没有一个简单的方法可以算出今天是今年开始的第几天的算法拉?

论坛徽章:
0
4 [报告]
发表于 2006-12-15 11:56 |只看该作者
还是没看懂。。。输入是什么?要求输出是什么?

后一个问题有一个部分解


  1. 儒略日期的计算(Julian Date)

  2. 下面这个公式可用于1900年至2099年

  3. 假定所求日期为年: Y; 月: M; 日: D
  4. 如果M>2, 则y = Y, m=M-3, 否则 y = Y-1, m=M+9
  5. JD=1721103.5 + int(365.25*y)) + int(30.6*m+0.5) + D

  6. int: 取整, 即取这个实数的整数部分

  7. 举例:
  8. 要算北京时间2005年2月12日15:30

  9.     * 转换成格林威治标准时间2005/2/12,7:30
  10.     * 因为M = 2,所以y = 2005-1 = 2004, m = 2+9 = 11, D = 12
  11.     * JD = 1721103.5 + int(365.25*y)) + int(30.6*m+0.5) + D
  12.       JD = 1721103.5 + int(365.25*2004) + int(30.6*11+0.5) + 12
  13.       JD = 1721103.5 + 731961 + 337 + 12
  14.       JD = 2453413.5
  15.     * 7:30/24 = 7.5/24 = 0.3125
  16.     * 最后结果 JD = 2453413.8125

  17. 该公式出自Norton's Star Atlas and Reference Book
复制代码

论坛徽章:
0
5 [报告]
发表于 2006-12-15 12:11 |只看该作者
来个计数器,一天加1 到了30就一次循环了.然后设置为0
如果是2天你不会想到月份吧. 为什么30就要和一个月联系?

论坛徽章:
0
6 [报告]
发表于 2006-12-15 12:23 |只看该作者
谢谢,提供了一个重要帮助,非常感谢!

论坛徽章:
0
7 [报告]
发表于 2006-12-15 12:35 |只看该作者
还是不明白楼主的意思。。。

论坛徽章:
0
8 [报告]
发表于 2006-12-15 13:06 |只看该作者
呵呵,就是计算某一天是今年开始的第几天,比如:对2004年5月1日,在2004年的累积天数就是122!

论坛徽章:
0
9 [报告]
发表于 2006-12-15 14:29 |只看该作者
如果是求天数,用数组month[12]={'每个月有几天'}
然后5月1日就是month[0]+..month[3]+1,呵呵,润年自己再处理,呵呵

我没看懂楼主说用队列的作用,"有一个30天的循环队列,希望有一个算法保证其连续性,难点在有31号和2月份,请介绍一下思路。 ",咋看着就累咧

论坛徽章:
0
10 [报告]
发表于 2006-12-15 15:27 |只看该作者
不知道楼主是想用,还是想玩,给个能用的

  1. #include <time.h>
  2. int getdayofyear(int year,int month,int day){
  3. struct tm t;
  4. bzero(&t,sizeof(t));
  5. t.tm_year = year;
  6. t.tm_mon = month;
  7. t.tm_mday = day;

  8. return mktime(&t)==-1?-1:t->tm_yday;

  9. }
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP