分析和理解根据日期计算星座函数

起始月份

号数

星座

结束月份

号数

时间区间

12

22

摩羯座

1

19

12/22 - 1/19

1

20

水瓶座

2

18

1/20 - 2/18

2

19

双鱼座

3

20

2/19 - 3/20

3

21

白羊座

4

20

3/22 - 4/20

4

21

金牛座

5

20

4/22 - 5/20

5

21

双子座

6

21

5/22 - 6/21

6

22

巨蟹座

7

22

6/22 - 7/22

7

23

狮子座

8

22

7/22 - 8/22

8

23

处女座

9

22

8/22 - 9/22

9

23

天秤座

10

22

9/22 - 10/22

10

23

天蝎座

11

21

10/22 - 11/21

11

22

射手座

12

21

11/22 - 12/21

12

22

摩羯座

1

19

12/22 - 1/19

一年12个月份

抽象一个数组

c = [摩羯,水瓶, 双鱼,白羊,金牛,双子,巨蟹,狮子,处女,天秤,天蝎,射手,摩羯]

c 为月份列表 该数组中序号为 1 的水瓶座对应的起始月份为 1月

序号为 起始月份 或者 (结束月份 - 1)

日期所对应的星座 起始月份为日期所在月 或者 终结月份为该月**(即起始月份为日期所在月-1)**

为了得出日期对应的星座,我们通过日期来计算对应星座的起始月份

startMonth = month - [(day < Date[month]) ? 1 : 0]

c = [摩羯,水瓶, 双鱼,白羊,金牛,双子,巨蟹,狮子,处女,天秤,天蝎,射手,摩羯]

index = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]

Date = [22, 20, 19, 21, 21, 21, 22, 23, 23, 23, 23, 22, 22]

startMonth - 计算后对应星座的起始月份;

Month - 日期对应的月份;

day - 日期对应的号数;

Date - 月份列表对应的日期列表;

解释:

对应星座起始月份 = 当前月份 - [(当前日期是否小于对应月份的日期)是则为1,否则为0]

判断(日期对应号数 < 起始月份为日期对应月份的星座的起始号数)

例子 2月18日 为水瓶座 2月19日 为双子座

18 < 19 (19为2月的双鱼座的起始日期) 小于成立即 2 - 1 = 1 一月对应的星座为水瓶座

19 = 19 小于不成立, 2 - 0 = 2 所以为二月对应的星座 双鱼座

简化列表 将日期列表取消 day < Date[month] =》 day - x < Date[month] - x

令 y = Date[month] - x ,y需要为个位数

现在起始日期对应的号数 最小为19号(双鱼座) 最大为23号(狮子座) 穷举并且列出表格

x

y

x + y = 19

x

y

x + y =23

10

9

14

9

11

8

15

8

12

7

16

7

13

6

17

6

14

5

18

5

15

4

19

4

16

3

20

3

17

2

21

2

18

1

22

1

19

0

23

0

两列中x的交集为 14 -19

取x = 14

Date = [22, 20, 19, 21, 21, 21, 22, 23, 23, 23, 23, 22, 22]

date - 14 最后列表为8,6,5,7,7,8,9,9,9,9,8,8 => '865778999988'

startMonth = month - [(day < Date[month]) ? 1 : 0]

=> month - (day - 14 < '865778999988'.charAt(month))

true 自动变为 1;

false 自动变为 0;

charAt为寻找字符串对应位置的str

最终代码

var date = new Date(2017,1,12);

//设置日期

function getHoroscope(date) {

var c = ['摩羯','水瓶','双鱼','白羊','金牛','双子','巨蟹','狮子','处女','天秤','天蝎','射手','摩羯']

var month = date.getMonth() + 1;

var day = date.getDate();

var startMonth = month - (day - 14 < '865778999988'.charAt(month));

return c[startMonth]

}

getHoroscope(date);

//水瓶

c语言switch判断星座,通过日期计算星座 - osc_d41sfzmu的个人空间 - OSCHINA - 中文开源技术交流社区...相关推荐

  1. c语言问答题斐讯通信,C总结-part_1 - LinearLaw的个人空间 - OSCHINA - 中文开源技术交流社区...

    1_C语言概述 1.库引用 1.1.几个例子 例1,调用系统指令 // b.c #include int main(void) { // system函数,相当于在命令行界面中输入对应的命令 syst ...

  2. mysql怎么 计算周岁_C#计算周岁 - osc_h7d57ub2的个人空间 - OSCHINA - 中文开源技术交流社区...

    /// /// 计算年龄字符串(周岁) /// 默认返回:xx岁xx月xx日 /// /// 第1个日期参数 /// 第2个日期参数 /// 返回字符串的格式,默认为:{0}岁{1}月{2}日 pri ...

  3. 直白点理解c 语言中的循环体,反射机制 小小谈 - osc_nnbkiac5的个人空间 - OSCHINA - 中文开源技术交流社区...

    反射机制(Reflection) [TOC] 写在前面 本文地址:https://www.cnblogs.com/oberon-zjt0806/p/11082012.html 这里是Oberon 本文 ...

  4. c语言 开辟复数指针数组,指针和数组 - llwwzz的个人空间 - OSCHINA - 中文开源技术交流社区...

    指针的几个要点: 一 指针的定义,赋值 要区分: int a; int *p = &a; 这是定义的时候初始化,即赋值 ======================= int a; int * ...

  5. c语言ik,C语言入门 - osc_xgq4n4ik的个人空间 - OSCHINA - 中文开源技术交流社区

    学完java和py再学这个感觉真的是不爽,前面的还好,基本都直接上手了,但是还是记录一下吧,毕竟学不会得挂科呀 hello #include int main() { printf("hel ...

  6. 按照c语言规首字母只能是,C语言--指针 - osc_nbqoh20k的个人空间 - OSCHINA - 中文开源技术交流社区...

    [TOC] #知识内容总结 ##为什么要学习指针? 我们已经学习了如何用数组存放多个相同类型的数据并进行运算,但数组的长度在定义时必须给定以后不能再改变.如果事先无法确定需要处理数据数量,应该如何处理 ...

  7. c语言第三次作业(循环),C语言——第三次作业 - osc_kt69pvbx的个人空间 - OSCHINA - 中文开源技术交流社区...

    #作业要求一# 题目6-1 输出月份英文名 题目6-2 查找星期 题目6-3 计算最长的字符串长度 题目6-4 指定位置输出字符串 作业:C高级第三次作业(2)没有思路,知识点也没有明白,未完成. # ...

  8. %20ld c语言,C语言第二次实验报告 - osc_ldea7g3t的个人空间 - OSCHINA - 中文开源技术交流社区...

    一.实验题目,设计思路,实现方法 第十一次作业(二维数组): 11-5 打印杨辉三角(20 分) 本题要求按照规定格式打印前N行杨辉三角. 输入格式: 输入在一行中给出N(1≤N≤10). 输出格式: ...

  9. java实现自举_实现语言的自举 - 沙枣的个人空间 - OSCHINA - 中文开源技术交流社区...

    几乎所有的语言项目,其核心都是用更底层的语言写的. 底层语言大部分是 C,C++,而扩展这门语言的核心,就要用另外一种语言 去写.这给语言设计者较大的挑战. 开发语言必须具备底层语言的编写能力,而为了 ...

最新文章

  1. 面试必问---Java线程池8大拒绝策略
  2. Chrome Extension 检查视图(无效)处理方法
  3. 034:DTL常用过滤器(3)
  4. sharepoint权限操作(记录以备忘)
  5. java反多态的代码_Java多态性代码详解
  6. android 静态list,android studio 利用gradle和cmakelist生成c++静态库.a的方法总结
  7. 文字打印机 效果实现
  8. 常见Kotlin高频问题解惑
  9. ubuntu下查看进程端口
  10. java里shake是什么意思_shake是什么意思_shake在线翻译_英语_读音_用法_例句_海词词典...
  11. 基于用户角色的数据库智能监控系统应用场景分析
  12. 吴恩达《机器学习》第二章:线性回归
  13. 我的 Visual C++ 6.0学习网站
  14. UOS家庭版(21.2)安装SecureCRT(scrt-9.1.1-2638.ubuntu20-64.x86_64.deb)无法运行问题
  15. Java发送mail报错“java.util.ServiceConfigurationError: com.sun.mail.imap.IMAPProvider not a subtype”
  16. mpeg格式转换成mp4,mpeg转mp4
  17. MBTI职业性格在软件研发组织中不同岗位的分布研究
  18. 【Unity Shader 消融效果_案例分享】
  19. 计算机考研各科目分值分布,2019考研各科目试卷分值分布及结构分析
  20. 超融合架构的本质是什么(上)

热门文章

  1. 每次买新手机后要安装的软件(个人爱好)
  2. 知识产权保护怎么申请以及怎样保护
  3. Android开发日志打卡APP(一)
  4. 数据治理-理论-1-基本概念
  5. 英语作文计算机国际会议开幕词,英语学术会议开幕词
  6. 历代名人、学者对商鞅的评价
  7. Python Matplotlib画图基础介绍
  8. 关闭电脑时提示有人远程使用计算机,关机时提示有人正在远程使用
  9. office2010分开显示
  10. 郑州大学研究生计算机专业分数线,2019郑州大学研究生分数线(含2016-2019历年复试)...