今天看到一个很有意思的话题,话题描述如下:
根据下列信息,计算从 1901 年 1 月 1 日到 2000 年 12 月 31 日,每个月的第一天有多少个星期天?
a) 1900.1.1 是星期一
b) 一月、三月、五月、七月、八月、十月和十二月是 31 天
c) 4 月、6 月、9 月和 11 月 30 天
d) 二月是 28 天,闰年是 29 天
e) 能被 4 整除但不能被 100 整除的年份是闰年
f) 能被 400 整除的闰年
以下是C语言实现版本:
#include #include bool isLeapYear(int year); // start is the weekday of 1st, January // return the num of the first day of each month // is Sunday. // the start will change into the next year int getYearNum(int* start, int year); // Num of days of each month int days[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; int leapdays[13] = {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; int main(void) { int sum = 0; int start = 1901; int end = 2000; int startWeek = 1; int startYear = 1900; int i; for (i = 1; i < 13; ++i) days[i] += days[i - 1]; for (i = 1; i < 13; ++i) leapdays[i] += leapdays[i - 1]; for (i = startYear; i < start; ++i) getYearNum(&startWeek, i); for (i = start; i <= end; ++i) sum += getYearNum(&startWeek, i); printf("%dn", sum); return 0; } bool isLeapYear(int year) { if (year % 4 == 0 && year % 100 != 0) return true; else if (year % 400 == 0) return true; return false; } int getYearNum(int* start, int year) { int i; int count = 0; int yeardays; if (isLeapYear(year)) { yeardays = 366; for (i = 0; i < 12; ++i) if ((leapdays[i] % 7 + *start)%7 == 0) ++count; } else { yeardays = 365; for (i = 0; i < 12; ++i) if ((days[i] % 7 + *start)%7 == 0) ++count; } *start = (yeardays % 7 + *start)%7; return count; }
Down是最简单的python:
import calendar sum = 0 startYear = 1901 endYear = 2000 for year in xrange(startYear, endYear + 1): for month in xrange(1, 13): if calendar.monthcalendar(year, month)[0].index(1) == 6: sum = sum + 1 print sum
最近对 JavaScript web scripting 有点兴趣,所以尝试用 JavaScript 来实现。感觉很好,有可视化和跨平台。
好的有趣的c语言程序,一个问题有趣的c语言程序,多种语言,每种语言都有自己的优缺点。同时使用多种语言是一种很棒的体验。
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 提示下载完但解压或打开不了?
- 找不到素材资源介绍文章里的示例图片?
- 欧资源网