黑色星期五的判定

一道简单的C语言编程练习题,判断黑色星期五,提示输入一个年份,然后给出这一年中所有存在的黑色星期五的月份,并且给出黑色星期五的个数。判断星期是使用蔡勒公式。

/*
 * Author: Nonkey 
 * Time  : 2015-08-02 sunday
 * black friday judge 
 * 要求:输入一个年份 , 判断这个年份中是否存在黑色星期五 ,如果有,则输出总共有
 *       几个,并输出月份。
 * 思路:由于只需要判断是否有黑色星期五,所以,不必要每个月每一天的推算,黑色星
 * 		 期五当然只出现在13号,所以,只要判断输入的年份的每个月中的13号是否有星
 * 		 期五的就行了,判断星期用蔡勒公式。
 * */

#include <stdio.h>

int main(void)
{
	int year , moon ,day ,week ,y_in;
	int i ,count = 0 ;
	day = 13 ;		//总是判断13号,其他的不管
	printf("Pls input year : ") ;  scanf("%d",&y_in) ;

	for(i = 1 ;i <= 12 ;i++)
	{
		if(i == 1 || i == 2)
		{
			moon = i + 12 ;
			year = y_in - 1 ;
		}
		else
		{
			moon = i ;
			year = y_in ;
		}
		if((year < 1752) || (year == 1752 && moon < 9) || (year == 1752 && moon == 9 && day < 3))
			week = (day + 2 * moon + 3 * (moon + 1) / 5 + year + year / 4 + 5) % 7 ;
		else
			week = (day + 2 * moon + 3 * (moon + 1) / 5 + year + year / 4 - year / 100 + year / 400) % 7 ;
		week++ ;		//除 7 取余得到的是 0--6 的数字,需要 + 1 来修正到我们习惯的 1 --7 星期表示法 。
		if(week == 5)
		{
			count++ ;
			printf("moon : %d\n",i) ;
		}
	}
	if(count == 0)
	{
		printf("This year don‘t have black friday.\n") ;
	}
	else 
		printf("All black friday is %d:\n",count) ;
	return 0 ;
}
时间: 2024-08-07 04:09:23

黑色星期五的判定的相关文章

程序运行状态的判定

怎么知道手机的一个程序是否在运行,又或是在不在前台运行呢?下面一个方法就可以判定了. /** * 返回app运行状态 * 1:程序在前台运行 * 2:程序在后台运行 * 3:程序未启动 * 注意:需要配置权限<uses-permission android:name="android.permission.GET_TASKS" /> */ public int getAppSatus(Context context, String pageName) { ActivityM

POJ C程序设计进阶 编程题#3:运算符判定

编程题#3:运算符判定 来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 注意: 总时间限制: 1000ms 内存限制: 65536kB 描述 两个整数 a 和 b 运算后得到结果 c.表示为:a ? b = c,其中,?可能是加法 +,减法 -,乘法 *,整除 / 或 取余 %.请根据输入的 a,b,c 的值,确定运算符.如果某种运算成立,则输出相应的运算符,如果任何运算都不成立,则输出 error. 例如: 输入: 3,4,5 输出: er

混合图的欧拉回路判定

对于有向图和无向图的欧拉回路判定,很容易做到.那对于混合图呢?? 混合图就是图中既存在无向边又存在有向边的图. 至于解法: 转载自这里 把该图的无向边随便定向,计算每个点的入度和出度.如果有某个点出入度之差为奇数,那么肯定不存在欧拉回路.因为欧拉回路要求每点入度 = 出度,也就是总度数为偶数,存在奇数度点必不能有欧拉回路. 好了,现在每个点入度和出度之差均为偶数.那么将这个偶数除以2,得x.也就是说,对于每一个点,只要将x条边改变方向(入>出就是变入,出>入就是变出),就能保证出 = 入.如果

NEFU120 梅森素数【Lucas-Lehmer判定】

题目链接: http://acm.nefu.edu.cn/JudgeOnline/problemshow.php?problem_id=120 题目大意: 给一个数p,若Mp = 2^p - 1是梅森素数,则输出"yes",否则输出"no". 思路: 这道题p小于62.Mp就小于2^62-1.如果直接进行素数判别会比较慢,用筛法的话数据量 又会很大.所以这里用了Lucas-Lehmer判定法则. Lucas-Lehmer判定法则具体步骤: 如果要判定的整数位Mp =

Java虚拟机:如何判定哪些对象可回收?

版权声明:本文为博主原创文章,转载请注明出处,欢迎交流学习! 在堆内存中存放着Java程序中几乎所有的对象实例,堆内存的容量是有限的,Java虚拟机会对堆内存进行管理,回收已经"死去"的对象(即不可能再被任何途径使用的对象),释放内存.垃圾收集器在对堆内存进行回收前,首先要做的第一件事就是确定这些对象中哪些还存活着,哪些已经死去.Java虚拟机是如何判断对象是否可以被回收的呢? 引用计数算法        引用计数算法的原理是这样的:给对象添加一个引用计数器,每当有一个地方引用它时,计

1065 最小正子段和 二分答案 + 判定

http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1065 我的思路比较笨,我是直接二分那个答案mid 然后进行一次O(nlogn)的判定,如果能找到一个区间的和比mid小的,(当然这个区间的和也是要大于0),那就return true 进行判断如下: 处理出前缀和dp[i],对于每一个i 目标是:在前i - 1个中,查看是否有这样的一个x,使得,dp[i] - x    <=   mid,&& dp[i] -

简单聊聊java中如何判定一个对象可回收

背景 说到java的特性,其中一个最重要的特性便是java通过new在堆中分配给对象的内存,不需要程序员主动去释放,而是由java虚拟机自动的回收.这也是java和C++的主要区别之一:那么虚拟机是如何实现自动回收的呢?它的基本回收算法又是什么呢?  这篇随笔先不介绍这些~ ~,熟话说 饭要一口一口地吃,路要一步一步地走嘛,这篇随笔主要讲解的是回收的前提:如何判断一个对象可以回收. 对java中如何判断一个对象可以回收的一般性认识 在没有学习<深入理解java虚拟机>之前,对于java中判断一

uva 11396Claw Decomposotion(二分图判定)

 题目大意:给出一个简单无向图,每一个点的度为3.推断是否能将此图分解成若干爪的形式.使得每条边都仅仅出如今唯一的爪中. (点能够多次出如今爪中) 这道题实质上就是问这个图是否为二分图,dfs判定就可以 #include<cstdio> #include<cstring> #include<cmath> #include<cstdlib> #include<iostream> #include<algorithm> #includ

hdu 5285 wyh2000 and pupil(二分图判定)

对每两个不认识的人连一条边,则此题可转化为二分图判定(二分图可有多个). 如果有一部分图判定为不是二分图,则输出“Poor wyh”. 否则,分别累加每个二分图的最多的颜色数. #include <algorithm> #include <iostream> #include <cstring> #include <cstdio> #include <string> #include <stack> #include <cmat