| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1330 人关注过本帖
标题:[求助]任意输入某年某月某日,算出该日是该年的第几天。
只看楼主 加入收藏
圆舞飞飞
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2006-11-28
收藏
 问题点数:0 回复次数:14 
[求助]任意输入某年某月某日,算出该日是该年的第几天。
哪位有算法,请写一下!
搜索更多相关主题的帖子: 该日 输入 算法 
2006-12-16 16:49
卧龙孔明
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:59
帖 子:3872
专家分:684
注 册:2006-10-13
收藏
得分:0 

My Blog: www.aiexp.info
虽然我的路是从这里开始的,但是这里不再是乐土.感谢曾经影响过,引导过,帮助过我的董凯,飞燕,leeco,starwing,Rockcarry,soft_wind等等等等.别了,BCCN.
2006-12-16 17:35
福尔摩斯
Rank: 5Rank: 5
等 级:贵宾
威 望:12
帖 子:4011
专家分:370
注 册:2006-8-15
收藏
得分:0 
首先,先确定一下年份是闰年还是平年

能被4整除,不能被100整除的是闰年

能被400整除的也是闰年

其余都是平年

其次,建立两组数(一个用平年,一个用闰年)

这两组数是每个月的天数

在确定月份m

先将 1——m-1 个月的天数累和,得出D

最后将某日的d值加上D即可,即 N=D+d


我认为这种算法是最简单的

不知道有没有比我更简单的算法

自我放逐。。。
2006-12-16 17:46
福尔摩斯
Rank: 5Rank: 5
等 级:贵宾
威 望:12
帖 子:4011
专家分:370
注 册:2006-8-15
收藏
得分:0 
以下是引用卧龙孔明在2006-12-16 17:35:36的发言:
这里有: http://bbs.bc-cn.net/viewthread.php?tid=102320&extra=&page=100#

她要的是算法好不好


自我放逐。。。
2006-12-16 17:51
福尔摩斯
Rank: 5Rank: 5
等 级:贵宾
威 望:12
帖 子:4011
专家分:370
注 册:2006-8-15
收藏
得分:0 
当然,如果你觉得建立2组数太麻烦

你可以就建立一组数(按平年)

等累和后再判断平闰年

如果是平年,直接输出该数字

如果是闰年

再判断输入的日期是不是再在2月28号前

如果是,直接输出该数字

如果不是,就在该数字上加一即可


虽然剩下了1组数,但是多了2条判断语句

其实这两种方法都可以

我的倾向是第一种

因为对于判断语句,初学者不是能掌握的太好

自我放逐。。。
2006-12-16 17:59
臥龍孔明
Rank: 1
等 级:新手上路
帖 子:57
专家分:0
注 册:2006-12-16
收藏
得分:0 
以下是引用福尔摩斯在2006-12-16 17:46:16的发言:
首先,先确定一下年份是闰年还是平年

能被4整除,不能被100整除的是闰年

能被400整除的也是闰年

其余都是平年

其次,建立两组数(一个用平年,一个用闰年)

这两组数是每个月的天数

在确定月份m

先将 1——m-1 个月的天数累和,得出D

最后将某日的d值加上D即可,即 N=D+d


我认为这种算法是最简单的

不知道有没有比我更简单的算法

算法写的很详细,这就是核心算法


[shadow=255,red,2]未出隆中-----已知三分[/shadow] [shadow=255,blue,2]运筹帷幄-----决胜千里[/shadow]
2006-12-16 18:02
圆舞飞飞
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2006-11-28
收藏
得分:0 
上面的算法我懂了,不过还有点小问题呀,就是有关闰年的判断,我不太理解。

能被4整除,不能被100整除的是闰年

能被400整除的也是闰年

两者符合其中之一即是闰年!为什么?

脚步到不了的地方,眼光可以到达,眼光到不了的地方,梦想可以到达。
2006-12-18 19:16
卧龙孔明
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:59
帖 子:3872
专家分:684
注 册:2006-10-13
收藏
得分:0 
回楼上的,你理解的正确,比如
1900年,再试试2004年,再试试2000年你就知道为什么了

My Blog: www.aiexp.info
虽然我的路是从这里开始的,但是这里不再是乐土.感谢曾经影响过,引导过,帮助过我的董凯,飞燕,leeco,starwing,Rockcarry,soft_wind等等等等.别了,BCCN.
2006-12-18 20:13
无为无执
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2006-12-31
收藏
得分:0 
#include <stdio.h>
static int dayn[2][13]={
{0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
{0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
};
void yearday(int year, int month, int day)
{
int i, leap;
leap=year%4==0 && year%100!=0 || year%400==0;
for(i=1; i<month; i++)
day+=dayn[leap][i];
printf("It is the %d day of %d\n", day, year);
}
main()
{
int a, b, c, day;
printf("year=?\nmonth=?\nday=?\n");
scanf("%d%d%d", &a, &b, &c);
yearday(a, b, c);
}

我是初学者,提出一些傻乎乎的问题的时候希望大家多多包涵!谢谢!
2007-01-01 00:09
lujunhuan
Rank: 1
等 级:新手上路
帖 子:38
专家分:0
注 册:2006-11-30
收藏
得分:0 

#include "stdio.h"
main ()
{
int year, month, day;
int total;
int leap;
printf ("enter year.month.day\n");
scanf ("%d.%d.%d.", &year, &month, &day);
switch (month)
{
case 1: total=0+day; break;
case 2: total=31+day; break;
case 3: total=59+day; break;
case 4: total=90+day; break;
case 5: total=120+day; break;
case 6: total=151+day; break;
case 7: total=181+day; break;
case 8: total=212+day; break;
case 9: total=243+day; break;
case 10: total=273+day; break;
case 11: total=304+day; break;
case 12: total=334+day; break;
}
leap=year%4==0&&year%100!=0||year%400==0;
if (leap)
total++;
printf ("%d", total);

getch ();

}

2007-01-02 23:14
快速回复:[求助]任意输入某年某月某日,算出该日是该年的第几天。
数据加载中...
 
   



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

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