1. 程式人生 > >藍橋杯VIP——黑色星期五

藍橋杯VIP——黑色星期五

1.問題描述


2.演算法分析

典型的日期計算,其實就是列舉思想,首先我們確定從1998.1.1日週四開始列舉,然後判斷該年是否為閏年,再去判斷當星期數為8時我們需要將星期數重置為星期1開始,當每天的天數等於月末+1天時重置天數為下個月1號,當月份為13時跳出迴圈,年份+1,再依次迴圈。最後輸出即可。

提示:
這裡有幾個坑:首先你判斷月末和星期數都要+1而不是星期7就變為1,而且月末+1天也是個坑
然後需要注意的是,一開始迴圈我們不應該先將天數和星期數++,而是在後面進行++
應該先判斷是否是黑色星期五在判斷星期數,在判斷月份是否到年末了。


3.原始碼:

#include <iostream>
#include <cstdio>
using namespace std;

int m[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};//儲存每一個月的天數

int main(){
	int year;
	scanf("%d", &year);
	int y = 1998;
	int d = 1;	//1998.1.1
	int month = 1; //1月份 
	int w = 4;	//週四
	int cnt = 0;  //記錄每一年的既是13號又是週五的天數 
	while(y <=
year){ // cnt = 0; //記錄每一年的既是13號又是週五的天數 if (y % 400 == 0 || (y % 100 != 0 && y % 4 == 0)){ m[2] = 29; } else{ m[2] = 28; } while(1){ if (d == 13 && w == 5 && y == year){ cnt++; } if (w == 8){ w = 1; } if (d == m[month] + 1){ month++; d = 1
; } if (month == 13){ d = 1; month = 1; break; } d++; w++; } y++; } printf("%d\n", cnt); return 0; }

可以關注一下Blog:http://47.107.118.184