1. 程式人生 > >日曆的列印(兩個月並列列印)

日曆的列印(兩個月並列列印)

初版

// 包含兩種I/O庫,可以使用任一種輸入輸出方式
#include <stdio.h>
#include <iostream>
#include <iomanip> 
using namespace std;

// 函式printYear:按要求的格式列印某年的日曆
// 引數:year-年
// 返回值:無
void printYear(int year);

// leapYear:判斷閏年
// 引數:y-年
// 返回值:1-是閏年,0-不是閏年
int leapYear(int y)
{
	if (y % 4 == 0 && y % 100 !=
0 || y % 400 == 0) return 1; return 0; } // 函式whatDay:計算某年某月的1號是星期幾 // 引數:year-年,month-月 // 返回值:1到7--星期1到星期日 int whatDay(int year, int month) { // 1年月日是星期一 int w = 1; int i; // 1到year-1都是全年 for (i = 1; i < year; i++) { if (leapYear(i)) w += 366; else w += 365; } switch (month) { case 12
: // 加月的 w += 30; case 11: // 加月的 w += 31; case 10: // 加月的 w += 30; case 9: // 加月的 w += 31; case 8: // 加月的 w += 31; case 7: // 加月的 w += 30; case 6: // 加月的 w += 31; case 5: // 加月的 w += 30; case 4: // 加月的 w += 31; case 3: // 加月的 if (leapYear(year)) w += 29; else w += 28; case 2: // 加月的天
w += 31; case 1: // 1月不加了 ; } // 得到-6,其中為星期天 w = w % 7; // 調整星期天 if (w == 0) w = 7; return w; } // 請在下面補充程式碼,實現函式printYear /*************** Begin **************/ void printTwoMonths(int year, int month1, int month2) { //1.獲得month1和month2分別多少天以及第一天是星期幾 int first = whatDay(year, month1); int second = whatDay(year, month2); int day1, day2; switch (month1) { case 1:day1 = 31; break; case 2: if (leapYear(year)) day1 = 29; else day1 = 28; break; case 3:day1 = 31; break; case 4:day1 = 30; break; case 5:day1 = 31; break; case 6:day1 = 30; break; case 7:day1 = 31; break; case 8:day1 = 31; break; case 9:day1 = 30; break; case 10:day1 = 31; break; case 11:day1 = 30; break; case 12:day1 = 31; break; } switch (month2) { case 1:day2 = 31; break; case 2: if (leapYear(year)) day2 = 29; else day2 = 28; break; case 3:day2 = 31; break; case 4:day2 = 30; break; case 5:day2 = 31; break; case 6:day2 = 30; break; case 7:day2 = 31; break; case 8:day2 = 31; break; case 9:day2 = 30; break; case 10:day2 = 31; break; case 11:day2 = 30; break; case 12:day2 = 31; break; } std::cout << " "; printf(" %2d", day1); printf(" %2d", day2); std::cout << " "; std::cout << std::endl; //2.分別列印month1和month2的第一行 int i1 = first; int i2 = second; std::cout << " 一 二 三 四 五 六 日 一 二 三 四 五 六 日" << std::endl; for (int i = 1; i < first; i++) { std::cout << " "; } for (i1; i1 <= 7; i1++) { printf(" %2d", i1 - first + 1); } std::cout << " "; for (int i = 1; i < second; i++) { std::cout << " "; } for (i2; i2 <= 7; i2++) { printf(" %2d", i2 - second + 1); if (i2 % 7 == 0) { std::cout << std::endl; } } //3.列印剩餘的行,考慮:month1和month2中的換行問題和填充空格問題 //第二行 for (i1; i1 <= 14; i1++) { printf(" %2d", i1 - first + 1); } std::cout << " "; for (i2; i2 <= 14; i2++) { printf(" %2d", i2 - second + 1); if (i2 % 7 == 0) { std::cout << std::endl; } } //第三行 for (i1; i1 <= 21; i1++) { printf(" %2d", i1 - first + 1); } std::cout << " "; for (i2; i2 <= 21; i2++) { printf(" %2d", i2 - second + 1); if (i2 % 7 == 0) { std::cout << std::endl; } } //第四行 for (i1; i1 <= 28; i1++) { printf(" %2d", i1 - first + 1); } std::cout << " "; for (i2; i2 <= 28; i2++) { printf(" %2d", i2 - second + 1); if (i2 % 7 == 0) { std::cout << std::endl; } } //第五行 if ((day1 - (i1 - first + 1)) >= 7) { for (i1; i1 <= 35; i1++) { printf(" %2d", i1 - first + 1); } } else if (0 <= day1 - (i1 - first) && day1 - (i1 - first) <= 7) { for (i1; i1 <= day1 + first - 1; i1++) { printf(" %2d", i1 - first + 1); } for (i1; i1 <= 35; i1++) { std::cout << " "; } } else { for (i1; i1 <= 35; i1++) { std::cout << " "; } } std::cout << " "; if (day2 - (i2 - second) <= 7) { for (i2; i2 <= day2 + second - 1; i2++) { printf(" %2d", i2 - second + 1); } std::cout << std::endl; } else { for (i2; i2 <= 35; i2++) { printf(" %2d", i2 - second + 1); if (i2 % 7 == 0) { std::cout << std::endl; } } } //第六行 if ( i1 - first + 1 <= day1) { for (i1; i1 <= day1 + first - 1; i1++) { printf(" %2d", i1 - first + 1); } for (i1; i1 <= 42; i1++) { std::cout << " "; } } else if ((i1 - first + 1) > day1) { for (i1; i1 <= 42; i1++) { std::cout << " "; } } std::cout << " "; if (day2 - (i2 - second) <= 7) { for (i2; i2 <= day2 + second - 1; i2++) { printf(" %2d", i2 - second + 1); } std::cout << std::endl; } } void printYear(int year) { printTwoMonths(year, 1, 2); printTwoMonths(year, 3, 4); printTwoMonths(year, 5, 6); printTwoMonths(year, 7, 8); printTwoMonths(year, 9, 10); printTwoMonths(year, 11, 12); } /*************** End **************/ int main() { // 年 int y; // 輸入年 cin >> y; // 輸出該年的日曆 printYear(y); system("pause"); return 0; }

最終版本

// 包含兩種I/O庫,可以使用任一種輸入輸出方式
#include <stdio.h>
#include <iostream>
#include <iomanip> 
using namespace std;

// 函式printYear:按要求的格式列印某年的日曆
// 引數:year-年
// 返回值:無
void printYear(int year);

// leapYear:判斷閏年
// 引數:y-年
// 返回值:1-是閏年,0-不是閏年
int leapYear(int y)
{
	if (y % 4 == 0 && y % 100 != 0 || y % 400 == 0)
		return 1;
	return 0;
}

// 函式whatDay:計算某年某月的1號是星期幾
// 引數:year-年,month-月
// 返回值:1到7--星期1到星期日
int whatDay(int year, int month)
{
	// 1年月日是星期一
	int w = 1;
	int i;

	// 1到year-1都是全年
	for (i = 1; i < year; i++)
	{
		if (leapYear(i))
			w += 366;
		else
			w += 365;
	}
	switch (month)
	{
	case 12: // 加月的
		w += 30;
	case 11: // 加月的
		w += 31;
	case 10: // 加月的
		w += 30;
	case 9:  // 加月的
		w += 31;
	case 8:  // 加月的
		w += 31;
	case 7:  // 加月的
		w += 30;
	case 6:  // 加月的
		w += 31;
	case 5:  // 加月的
		w += 30;
	case 4:  // 加月的
		w += 31;
	case 3:  // 加月的
		if (leapYear(year))
			w += 29;
		else
			w += 28;
	case 2:  // 加月的天
		w += 31;
	case 1:  // 1月不加了
		;
	}

	// 得到-6,其中為星期天
	w = w % 7;

	// 調整星期天
	if (w == 0)
		w = 7;
	return w;
}

void printYearnumber(int year){
	int y1=year/1000;
	int y2=year/100%10;
	int y3=year/10%10;
	int y4=year%10;
const char number[][8][4]={
{{' ','*','*',' '},   //0
 {'*',' ',' ','*'},
 {'*',' ',' ','*'},
 {'*',' ',' ','*'},
 {'*',' ',' ','*'},
 {'*',' ',' ','*'},
 {'*',' ',' ','*'},
 {' ','*','*',' '}
},
{{' ','*','*',' '},   //1
 {' ','*','*',' '},
 {'*','*','*',' '},
 {' ','*','*',' '},
 {
            
           

相關推薦

日曆列印並列列印

初版 // 包含兩種I/O庫,可以使用任一種輸入輸出方式 #include <stdio.h> #include <iostream> #include <iomanip> using namespace std; // 函式printYear:按

python 操作符** 乘號就是乘方

spa 操作 操作符 inpu 類型 str 結果 操作數 輸出 一個乘號*,如果操作數是兩個數字,就是這兩個數字相乘,如2*4,結果為8**兩個乘號就是乘方。比如3**4,結果就是3的4次方,結果是81 *如果是字符串、列表、元組與一個整數N相乘,返回一個其所有元素重復N

Centos7編譯安裝ffmpeg字形容“噁心”以及迴圈播放本地視訊命令

迴圈播放本地視訊 ffmpeg -re -stream_loop -1 -i /root/rtmp/video/sss.mp4 -vcodec copy -acodec copy -f flv rtmp://0.0.0.0:1935/live/test1 /root/rtmp/vi

安裝Anaconda3 後,怎樣使用 jupyter notebook的 Python 2.7kernel核可選擇

Anaconda是使用python進行資料分析或資料探勘的一個優秀的工具包,其中的jupyter notebook也是其中一個十分好用的工具。jupyter notebook的使用方法簡單,直接在命令列中jupyter notebook就可以在瀏覽器中啟動。 眾所

劍指offer面試題9:用棧實現佇列佇列模擬棧

 題目描述: 用兩個棧來實現一個佇列,完成佇列的Push和Pop操作。 佇列中的元素為int型別。 思路一:有點死腦筋,每次pop後都預設下次是push操作,,,,。233主要是由於沒把握好兩個棧模擬時入隊和出隊的時機。考慮stack1和stack2的大小和入隊出隊的關係即可改

填坑-微信小程式、商戶號申請,各種企鵝留下的坑親身經歷

1. 小程式申請。現在微信公眾平臺分小程式、服務號、訂閱號三種,每種都用獨立的賬號登入。小程式是可以通過公眾號(分服務號、訂閱號)關聯認證的,只需先開通一個公眾號(服務號,訂閱號不行),交三百大洋,然後直接從公眾號關聯認證多個小程式,小程式的單獨認證費用可以免了。而如果單獨去開通,則每一個賬號認證需要各交三百

LeetCode349. Intersection of Two Arrays陣列的交集JAVA實現

Given two arrays, write a function to compute their intersection. Example 1: Input: nums1 = [1,2,2,1], nums2 = [2,2] Output: [2] Examp

前端演算法:給定陣列,編寫一個函式來計算它們的交集陣列的交叉點

給定兩個陣列,編寫一個函式來計算它們的交集。 例1: 輸入: nums1 = [1,2,2,1],nums2 = [2,2] 輸出:[2,2] 例2: 輸入: nums1 = [4,9,5],nums2 = [9,4,9,8,4] 輸出:[4,9] 注意: 結果

Add Two Numbers連結串列求和

You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order and each of their nodes contain

LeetCode刷題記錄——第349題陣列的交集

題目描述 給定兩個陣列,編寫一個函式來計算它們的交集。 示例 1: 輸入: nums1 = [1,2,2,1], nums2 = [2,2] 輸出: [2] 示例 2: 輸入: nums1 = [4,9,5], nums2 = [9,4,9,8,

Linux編譯安裝ffmpeg字形容“噁心”以及迴圈播放本地視訊命令

系統版本:Centos7 迴圈播放本地視訊 ffmpeg -re -stream_loop -1 -i /root/rtmp/video/sss.mp4 -vcodec copy -acodec copy -f flv rtmp://0.0.0.0:1935/l

java 計算生日 剩餘天數 日期間隔天數

 public Object decorate(Object columnValue, PageContext pageContext, MediaTypeEnum media) throws DecoratorException    {        Object obj

Java計算時間差時間相減

在Android開發或者Java學習中,經常要求兩個時間差 比如說: 現在是 :2004-03-26 13:31:40 過去是:2004-01-02 11:30:24 我現在要獲得兩個日期差,差的形式為:XX天XX小時XX分XX秒 這前後時間可能是機器生成的,也

LeetCode--371. Sum of Two Integers整數的和Python

題目: 給定兩個整數a和b,要求不使用‘+’和‘-’,返回這兩個整數的和。 解題思路: 由於不能使用加減符號,故考慮使用二進位制數的按位與和按位或等操作,已知按位異或可以得到不考慮進位的結果a^b,按位與可以得到進位的情況a&b。所以把進位的結果左移一位,再和異或的

LeetCode | Add Two Numbers連結串列相加

題目: You are given two linked lists representing two non-negative numbers. The digits are stored in reverse order and each of their nod

阿里面試經歷回顧執行緒分別列印0-100之間的奇偶數

第一輪電話面試 年前在朋友的內推下,成功獲得了阿里的面試機會,第一輪電話面試記得是約在某一工作日的晚上進行,由於白天一直在忙於工作,確實不方便進行面試,我跟面試官說明了情況,面試官這才答應了在當天晚上8點進行面試(還是感謝阿里面試官的諒解)。當天掛完電話是無比

C的總結也是IT菜鳥訴苦吧

從暑假到現在快學3月過去了,今日無聊對這段時光稍作整理。也算是抱怨一下吧! 當初選了這個專業,現在就要受著。學了兩個月的C了,對這個專業也有所瞭解,看的東西越多,心裡恐慌的情緒更勝。什麼 組合語言 C C++ c# Python Java 還有jav

轉帖 我在北京當了“地老鼠”

我在北京當了兩個月“地老鼠”                作者:清秋子 提交日期:2003-07-15 19:03:00                           我在北京當了兩個月“地老鼠”--底層生活散記                     1    

用java的for迴圈實現列印上下正反三角形

程式碼如下: import java.util.*; public class Circle { public static void main(String args[]) { int n

歷經的秋招,結束了,談談春秋招中一些重要的知識點吧本科+後臺+騰訊

歷經兩個月的秋招總算是結束了,從七月份開始複習秋招相關知識,到八月多開始筆試、面試,到九月下旬的秋招結束,在筆試面試的這兩個月裡,還是挺累的。這篇文章就說說秋招這段時間的收穫以及給對於明年要參加秋招的同學的一些建議吧。 一、最後去的公司 對於我來說,這次秋招算是滿意的吧,找到了想去的城市(深圳)以及公司(騰訊